2012-02-21 11 views
12

Ho iniziato a giocare con OpenCV per un progetto su cui sto lavorando.
Per questo progetto sto coltivando piante in vaso. Le immagini statiche di diversi stadi di sviluppo sono prese dall'alto (vedi figura sotto).Approccio ottimale per rilevare forme simili a foglie in opencv

Original picture

L'obiettivo è quello di rilevare e misurare in definitiva (cioè formato) foglie delle piante che crescono in diversi stadi di sviluppo.
Ho provato un approccio ingenuo all'uso del rilevamento di bordo Canny, tuttavia non funziona bene (vedi la figura sotto) perché rileva anche i piccoli bordi nel terreno (indipendentemente dal tipo di soglia che ho usato).

Canny edge detection

penso che l'approccio migliore è quello di primo segmento l'immagine in base al colore e quindi utilizzare qualche algoritmo di rilevamento del bordo per rilevare le foglie.
C'è un modo migliore per farlo?

La struttura della foglia è nota in anticipo. Posso usare l'algoritmo di apprendimento automatico/classificazione per ottenere risultati ancora migliori?

Non ho anche pensato a come misurare le dimensioni delle foglie? Esistono modelli comuni per misurare le dimensioni e altri descrittori? (potrebbe avere un oggetto di riferimento con dimensioni note nell'immagine?).

Infine, devo anche occuparmi dell'occlusione. Questo non è visibile nelle immagini, ma nelle fasi successive di sviluppo potrei avere a che fare con foglie sovrapposte. Ci sono approcci per affrontarlo?

non posso pregiudizi l'immagine a mio favore (vale a dire oscurare il suolo, ecc) come ci potrebbe essere migliaia di piante che devono essere elaborati.

In sintesi le mie domande:

  • Qual è l'approccio migliore per individuare foglie in un terreno (vedi figure)?
  • L'algoritmo di apprendimento automatico può migliorare il rilevamento?
  • Come posso misurare la dimensione delle foglie?
  • Come trattare le foglie di occlusione/sovrapposizione?

Sarei davvero grato per alcuni suggerimenti o idee.

Aggiornamento (sulla base dei commenti Jeff7):

ho eseguito la segmentazione del colore modificazione in senso insieme ad un algoritmo floodfill e finito con questa immagine:

mean shift color segmentation

Quando ho ora eseguire il rilevamento canny edge + findcontours su quella foto i risultati sono molto meglio:

Contours

risposta

3

Dato che si ha un grande controllo sulle condizioni in cui si scattano le immagini, i pregiudizi sono importanti a proprio favore. Crea una maschera dalla carta nera per posizionarla attorno alla radice della pianta quando vuoi catturare un'immagine. Il tuo problema si riduce a quello di individuare i pixel verdi su uno sfondo nero. Dal momento che controlli anche la posizione della fotocamera rispetto alla posizione della pianta, dovresti essere in grado di sistemare le cose in modo che il rapporto pixel/mm sia costante tra le serie di immagini. L'area foglia è quindi una semplice questione di contare i pixel.

Questo non risolve, tuttavia, il problema dell'occlusione. Probabilmente potresti immaginare qualcosa prendendo 2 ulteriori immagini, elevazioni della pianta in 2 piani ortogonali (sempre usando lo sfondo nero) per avere un'idea della forma della pianta.

EDIT dopo il commento ...

Beh, la tua domanda incluso l'affermazione 'Per questo progetto sto crescendo un determinato impianto in una pentola' e ora si desidera elaborare migliaia di quei maledetti. Continuerei a perseguire le possibilità di pregiudicare l'immagine a tuo favore. Ad esempio, se l'immagine che hai pubblicato non aveva plastica verde sullo sfondo, probabilmente avresti un'immagine che potrebbe essere separata, con un buon grado di accuratezza, con semplici soglie sul canale verde delle tue immagini . Quindi sbarazzati dello sfondo verde e innaffia il terreno prima di eseguire l'imaging per aumentarne l'oscurità.

Per quanto riguarda il problema dell'occlusione, avrete bisogno di qualcosa di più intelligente del mio suggerimento originale di trattare con migliaia di piante. Forse potresti sacrificare alcune piante in ogni fase, misurare l'area della foglia osservata direttamente dall'alto, quindi strappare le foglie, disporle separatamente su un pezzo di carta nera e ricavare una relazione empirica tra l'area totale e l'area osservabile.

ulteriori modifiche

OK, quindi non è possibile pregiudizi la scena a tuo favore. Hai pensato di utilizzare un filtro sulla fotocamera per ammettere solo la luce verde? O l'illuminazione che rende gli oggetti verdi più luminosi rispetto agli oggetti non verdi? Sono fuori di idee su questo ...

montaggio finale

ho esaurito le idee. Penso che il tuo approccio originale, usando il colore per discriminare tra foglie e sfondo, sia buono. Dato che conosci la struttura delle foglie, potresti provare la corrispondenza dei modelli, ma puoi stimare sia le aree che le lunghezze (o le differenze di area e lunghezza) contando solo i pixel. Si potrebbe voler esaminare le operazioni morfologiche (ad esempio la scheletrizzazione) per ricavare misure di forma dalle immagini. È possibile trovare materiale nella letteratura sul telerilevamento del fogliame (ecc.) Che aiuta.

Ho l'impressione che tu abbia mentalmente impegnato un obiettivo di implementazione di un sistema di visione artificiale, in cui il tuo obiettivo è davvero quello di monitorare lo sviluppo degli impianti e alcune delle tue idee (ad es. Rilevamento dei bordi, apprendimento automatico) non contribuire a raggiungere il tuo obiettivo.

+0

grazie per il feedback. Hai ragione, ho il controllo sulle condizioni e ho anche pensato di "oscurare" il terreno. Sfortunatamente non è davvero possibile in quanto devo occuparmi non solo di una pianta, ma a volte delle quali migliaia e l'oscuramento del suolo richiederebbero troppo tempo. Per misurare le dimensioni delle foglie, hai ragione. Questo posso controllare in realtà dato che l'immagine prende sempre dalla stessa posizione e le pentole hanno le stesse dimensioni. –

+0

Ci scusiamo per la confusione. Ho aggiornato le domande originali per chiarire un po '.Stavo solo mostrando una pianta come esempio, ma di solito ho 36 di quei vasi in un vassoio. –

+0

No, non ci ho pensato, ma questi sono buoni suggerimenti. Grazie. Lo esaminerò. Potete raccomandare algoritmi o approcci che funzionano meglio in quell'impostazione (dove non posso pregiudicare l'immagine e avere questo tipo di distribuzione dei colori)? –

3

Dai un'occhiata alla segmentazione del colore a spostamento medio (c'è un esempio incluso con OpenCV nella directory degli esempi). Puoi usare questo per separare la tua immagine in 2 classi (pianta e suolo) e usarla per elaborare ulteriormente i tuoi dati.

Per quanto riguarda la misurazione, è possibile ignorare inizialmente gli effetti di occlusione e la calibrazione della fotocamera e osservare solo la porzione di area nell'immagine che è la classe di impianto.

Se si vuole scendere a misurare singole foglie, si può adottare un approccio di "tracciamento" in cui si utilizzano le informazioni temporali e le informazioni spaziali nell'immagine. L'informazione temporale può essere la posizione e la dimensione della foglia nell'immagine precedente. Probabilmente ci sono molte tecniche che potresti applicare, ma inizierei semplice se fossi in te e vedessi quanto ti riesce.

+0

Grazie per il feedback. Ho aggiornato la mia risposta in base al tuo input. Sembra funzionare duro ho dovuto giocare un po 'con i parametri di segmentazione di spostamento medi per ottenere buoni risultati (ho dovuto aumentare il raggio della finestra spaziale di una discreta quantità che rende l'algoritmo eseguito piuttosto lento) –

0

PlantCV fa notare che più si controlla la configurazione, meno lavoro si deve fare nel software.
Se si controlla la posizione di semina (anziché semplicemente spargerli sul vassoio), è possibile mascherare le piantine e liberarsi del disordine di fondo. Questo è anche un aiuto significativo per lavorare con le singole piante e trovare la stessa pianta in immagini diverse. Le piante che si sovrappongono creeranno una situazione impossibile, sia quando si spargono semi e germogli uno accanto all'altro, sia quando superano le dimensioni della spaziatura. Devi decidere se stai piantando per le migliori osservazioni, o una crescita ottimale. I due non sono reciprocamente compatibili. Secondo la mia esperienza, si è corretto utilizzare il colore (cv2.inRange) come passaggio principale, quindi passare al rilevamento del bordo Canny. Da lì, puoi ottenere contorni. Immagino che tu stia usando Arabadopsis, quindi potresti cercare un modello circolare per contare le foglie (non funziona con la lattuga). Dopo aver separato le piante e avere contorni (esterni), è possibile utilizzare cv2.contourArea e cv2.minAreaRectangle per ottenere alcune metriche di base. Questo è il percorso su cui sto lavorando.

0

Questa è un'area di ricerca attiva. Raccomando i seguenti documenti:

  • Scharr et al. 2016: Foglia segmentazione la fenotipizzazione impianto: uno studio di confronto (pdf)

  • Bell e Dee 2016: piante Guardando crescere-un documento di posizione sul computer vision e Arabidopsis thaliana. http://doi.org/10.1049/iet-cvi.2016.0127

PlantCV ha alcune strutture per segmentare i fogli con le trasformazioni e bacini di distanza, e vorrei aggiungere altro. Vedi il nostro preprint, una versione riveduta di cui sarà presto pubblicata a PeerJ.

Problemi correlati