Regionprops e eulernumber

di Anonimizzato9677 il
10 risposte
Ciao!

qualcuno sa spiegarmi bene come funziona eulernumber della funzione regionprops per il trattamento di un immagine di matlab?
da quello che ho capito io restituisce uno scalare che per ogni oggetto presente nell immagine fa oggetto-buchi nell oggetto......

ho capito bene??

perche se io scrivo tipo
 if(S(i).EulerNumber > 0) 
vuol dire che vado a prendere tutti gli oggetti nel immagine che nn hanno buchi?

grazie mille in anticipo!!!

10 Risposte

  • Allora, esattamente ti restituisce il numero di oggetti meno il numero di buchi. Prendi ad esempio le lettere dell'alfabeto.
    la A è un oggetto con un buco, quindi il suo numero di eulero = 0
    la B è un oggetto con due buchi, quindi eulero=-1
    la C è un oggetto senza buchi, quindi eulero=1
    la i è composta da due oggetti senza buchi, quindi eulero=2
    Se applichi il numero di eulero ad un'immagine, ti restituisce il numero di eulero totale.
    Se nell'immagine c'è scritto "ciao" il risultato dell'applicazione di eulernumber sarà il totale dell'immagine, non oggetto per oggetto. In questo caso dovrebbe venire 3.
    Per fare un controllo su ciascun oggetto dell'immagine devi fare un ciclo che estragga ciascun oggetto e ne calcoli il numero di eulero separatamente.
  • Ummmm capito grazie!

    quindi se la mia immagine è fatta per esempio di un triangolo che contiene un triangolo che a sua volta contiene un triangolo se io uso regionprops che mi "cataloga" gli oggetti e poi uso
    S(i).eulernumber >0 vado a beccare solamente il triangolo interno no?

    perchè il primo avrà dei buchi e quindi eulernumber è 0,il secondo la stessa cosa mentre l ultimo avrà eulernumber =1 perchè al suo interno nn ha triangoli

    ho capito bene?
  • Concettualmente è giusto (che vai a cercare il triangolo interno che è senza buchi e quindi ha numero di eulero=1). Questo ovviamente presuppone che stiamo parlando di un'immagine in bianco è nero dove il triangolo più interno è bianco.
    La cosa che non capisco dalle tue parole è come usi questo:
    S(i).eulernumber >0
    Cos'è S e cos'è i... perché se S è la tua immagine il numero di eulero è relativo all'immagine e non a ciascun oggetto che la compone. Ed avrai un solo numero che identifica tutta l'immagine.
    Ma forse semplicemente non hai specificato qui qualche passaggio.
  • Si l'immagine è in bianco e nero è correttamente "tresholdata" da un immagine rgb usando greytresh.

    la S e l a struttura che crea la regionprops.
    in pratica scrivo s=regionprops(im,'area','eulernumber','filledarea,etc)

    e poi scorro con un ciclo for i:dim(s) gli oggetti che ha preso la regionprops....

    è questo quello che ho fatto
  • Poi scusa nn ho capito una cosa...se il triangolo interno fosse nero vuol dire che nn lo leggerebbe?
  • Esatto... perché per lui gli "oggetti" sono le cose in bianco. Tutto quello che è nero è sfondo.
    Comunque, sarà il freddo che non permette ai miei neuroni di comunicare tra loro... mi risulta che regionprops crei un'unica struttura, non una struttura per ciascun oggetto... a meno che non la usi sull'immagine derivante da un bwlabel... probabilmente stai facendo così.
    In questo caso dovrebbe essere tutto corretto!
  • Si si ho mello l=bwlabel(img)

    e poi s=regionprops(l,area,etc...)

    mi ero dimenticato io di scriverlo
  • Meno male... mi stavo preoccupando per le mie facoltà intellettive...
  • Eheheh no no funzionano benissimo
    e grazie mille dell aiuto!!!!
  • Figurati!
Devi accedere o registrarti per scrivere nel forum
10 risposte