Reconocimiento de Enfermedades en Plantas PG003 Francisco R. Uribe Cornejo 375673 Cuernavaca, Mor., 25 de Noviembre, 2009 Agenda Introducción Metodología Implementación Resultados Conclusiones Introducción El Plan Nacional de Desarrollo 20072012 plantea como premisa básica la búsqueda del Desarrollo Humano Sustentable, correspondiendo a esto el Programa Especial Concurrente para el Desarrollo Rural Sustentable 2007-2012 (PEC 2007-2012) establece un conjunto de estrategias y alternativas para reactivar el agro mexicano entre las que podemos resaltar la protección al país de plagas y enfermedades y mejorar la situación sanitaria. Problemática Las pérdidas que ocasionan las plagas y enfermedades en los cultivos de los países desarrollados se ubican entre 10 y 20 por ciento de la producción [Oerke94], convirtiéndose en uno de los principales inconvenientes para los productores. Por ello, el diagnóstico y control de enfermedades es uno de los retos más importantes en los sistemas de producción de plantas cultivadas en el país. Justificación Las imágenes de las plantas pueden ser una fuente muy valiosa de información respecto a cambios en el crecimiento del cultivo, estado nutricional, incidencia de enfermedades y plagas, rendimiento y propiedades del suelo [Lee07]. Justificación Un sistema de visión computacional para diagnóstico de enfermedades en plantas de invernaderos se está desarrollando en esta institución Nuestro proyecto Objetivos General Reconocer la forma geométrica de una hoja de una especie de planta para identificar alteraciones en el contorno de la misma, bajo un ambiente controlado de iluminación y fondo. Base de Conocimiento Específicos Entrenamiento ANN Entrenamiento HMM Evaluación del sistema bajo características de la hoja Metodología propuesta Procesamiento Segmentación Entrenamiento ANN Sana Entrenamiento HMM Reconocimiento Enferma Extracción de características Implementación Cámaras • ZoomCam USB II • Full VGA, 15 FPS video • CIF resolution, 30 FPS video • 640 x 480 • Labtec Webcam • 352 x 288 30 FPS • Firefly MV • 752 x 480 at 61 FPS • ROI, 320x240 at 112 FPS • 2 x 2 pixel binning, 320x240 at 122 FPS Implementación Procesamiento •Filtro Gaussiano •Operaciones Morfológicas • Dilatación • Erosión Filtro Gaussiano •El filtro gaussiano se usa para emborronar imágenes y eliminar ruido. •Aproximación a una distribución gaussiana en dos dimensiones Valores típicos de un filtro gaussiano para una máscara de 3x3 •es el más útil, aunque no el más rápido Desventajas: Imagen original σ=1.0 σ=2.0 σ=4.0 •Disminución de nitidez •Aumento de borrosidad •Perdida de detalles Ventajas: • Es separable: es decir, en lugar de realizar una convolución bidimensional, podemos realizar dos convoluciones unidimensionales. •Da mejores resultados que un simple promerdio o media y se argumenta que la vista humana hace un filtrado de este tipo Operaciones Morfológicas. Dilatación y erosión •Para preservar el área de regiones conectadas con más precisión, se implementaron las operaciones de apertura y cierre. Operación de Cierre: Reducir los segmentos no deseados o generados por el ruido. Operación de Apertura: separar elementos que se encuentren muy cerca entre ellos en la imagen, en otras palabras, conectar las regiones cercanas más grandes. void processImage() { // Smooth cvSmooth(cvImage, out_rgb, CV_BLUR, 5, 5); // Grayscale //out_gray = cvCreateImage( cvSize(cvImage->width,cvImage->height), IPL_DEPTH_8U, 1 ); cvCvtColor( out_rgb, out_gray, CV_BGR2GRAY ); // Morphological open and closing operations cvMorphologyEx( out_gray, out_gray, 0, 0, CV_MOP_OPEN, CVCLOSE_ITR ); cvMorphologyEx( out_gray, out_gray, 0, 0, CV_MOP_CLOSE, CVCLOSE_ITR ); } Implementación Segmentación •Otsu •Canny OTSU • Al aplicar un umbral, T, la imagen en escala de grises, f(x,y), quedará binarizada; etiquetando con ‘1’ los píxeles correspondientes al objeto y con ‘0’ aquellos que son del fondo. • Se eligió el método de umbralización de Otsu [Otsu79] ya que en [Wang08] se recomendó por aportar información útil para extracción de características y caracterización de la hoja. • Otsu elige un umbral óptimo verificando que la varianza entre clases sea máxima Imagen Original Imagen umbralizada con Otsu Canny • Obtención de gradiente (magnitud y ángulo en cada pixel) • Adelgazamiento del ancho de los bordes, obtenidos con el gradiente, hasta lograr bordes de un pixel de ancho, se conoce como “supresión no máxima” • Histéresis de umbral al resultado de la supresión no máxima Imagen original OTSU Canny void segmentImage() { // Thresholding - Otsu cvThreshold(out_gray,out_gray,0,160,CV_THRESH_ OTSU); // Thresholding - Canny cvCanny(out_gray,out_gray,0,160); } Implementación Extracción de características • Códigos de cadena • Momentos • Características geométricas y morfológicas de la hoja Códigos de cadena • Normalmente, los contornos se pueden representar como una secuencia de vértices. Una representación alternativa puede ser las cadenas de Freeman [Freeman67]. • Con una cadena de Freeman, un polígono es representado como una secuencia de pasos en una de las ocho direcciones, cada paso es designado por un número entero de 0 a 7 Momentos • Una de las maneras más simples para comparar dos curvas es calcular los momentos de contorno. En términos generales, un momento es una característica del contorno calculado mediante la integración sobre todos los píxeles del contorno. • Usualmente, se utilizan los momentos normalizados, de modo que los objetos de la misma forma pero diferentes tamaños proporcionen valores similares. Del mismo modo, los momentos simples dependen del sistema de coordenadas elegido, lo que significa que los objetos no se comparan correctamente si se rotan. Imagen original Código de cadena y momento central de la hoja Características de la hoja Las hojas de las plantas nos brindan suficiente información tanto para identificación de especie como para diagnóstico de enfermedades en la planta Las características que utilizaremos para realizar el reconocimiento de la hoja serán: GEOMETRICAS •Área •Perímetro •Largo •Ancho MORFOLOGICAS • Relación de aspecto •Factor de forma •Rectangularidad •Relación perímetro – diámetro •Relación perímetro – longitud fisiológica – ancho fisiológico void featureExtraction() { // Retrieves all the contours and puts them in the list. // Compresses horizontal, vertical, and diagonal segments, leaving only their ending points. scanner = cvStartFindContours(out_gray, storage, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE ); int numCont = 0; while( (contour = cvFindNextContour( scanner )) != NULL ) { double len = cvContourPerimeter( contour ); // Calculate perimeter len threshold: double q = (out_gray->height + out_gray->width) / PERIM_SCALE; // Get rid of blob if its perimeter is too small if( len < q ) { cvSubstituteContour( scanner, NULL ); } else { // Smooth its edges if its large enough CvSeq* new_contour; // Polygonal approximation - Douglas-Peucker approximation algorithm new_contour = cvApproxPoly(contour, sizeof(CvContour), storage, CV_POLY_APPROX_DP, CVCONTOUR_APPROX_LEVEL, 0); // Convex Hull of the segmentation //new_contour = cvConvexHull2( contour, storage, CV_CLOCKWISE, -1); cvSubstituteContour( scanner, new_contour ); numCont++; } } contours = cvEndFindContours( &scanner ); rect = cvBoundingRect(contours); morphologicalFeatures(); // Contour - Freeman chain code cvZero(out_gray); cvDrawContours(out_gray, contours, CV_RGB(255,255,255), CV_RGB(0,0,0),1); contour=0; cvFindContours(out_gray,storage,&contour,sizeof(CvChain),CV_RETR _CCOMP,CV_CHAIN_CODE); } void morphologicalFeatures() { // Moments cvMoments(out_gray,&moments); M00 = cvGetSpatialMoment(&moments,0,0); M10 = cvGetSpatialMoment(&moments,1,0); M01 = cvGetSpatialMoment(&moments,0,1); // Geometrical Features gf_L = rect.width; gf_W = rect.height; gf_A = cvContourArea(contours); gf_P = cvArcLength(contours); /* Rectangularity Similarity between a leaf and a rectangle. Lp Wp / A */ mf_rec = gf_L * gf_W / gf_A; // Morphological Features /* Aspect ratio Ratio of physiological length to physiological width. Lp / Wp */ mf_ar = gf_L / gf_W; /* Perimeter ratio of physiological length Ratio of perimeter to physiological length. P / Lp */ mf_prl = gf_P / gf_L; /* Form factor Difference between a leaf and a circle. 4 π A / P^2 */ mf_ff = 4 * 3.141592 * gf_A / pow(gf_P,2); /* Perimeter ratio of physiological length and physiological width Ratio of leaf perimeter and the sum of physiological length and physiological width. P / (Lp + Wp) */ mf_prlw = gf_P / (gf_L + gf_W); } Hidden Markov Model Es un modelo de Markov en que los estados no son directamente observables. Se puede ver como un doble proceso estocástico: – Un proceso estocástico “escondido” que es no observable – Otro proceso estocástico que produce la secuencia de observaciones Queda caracterizado por los siguientes elementos: • Conjunto finito de N estados de la cadena de Markov de primer orden • Conjunto de probabilidades de transición entre estados. • Distribución de probabilidad de estados iniciales • Probabilidades de generación de observaciones Preguntas básicas • Dado el modelo, calcular la probabilidad de una secuencia de observaciones Evaluación • Dado el modelo, obtener la secuencia de estados más probable correspondiente a una secuencia de observaciones Secuencia óptima • Dada una secuencia de observaciones, ajustar los parámetros del modelo Aprendizaje Datos de Entrenamiento Contorno codificado en Cadenas de Freeman T=789 565565443444434454545456556556534343434343434343 434343434555556555544444444545545343434344454444 444544444445444455555554555555434443443444343323 333233323355455444454444444544445455454554565666 56665666565545555455555455554556566565665665667 6767666666666656666666667676767677676767676667 66666766666766677677767777677776777677676667667 66676777777677777770700700700707007007007000000 0000070000000000707070707070707000000000000000 0070000000000000000000001000000000010000000001 0000000000100000010001000100010001000100010010101 0101010101010101010101010101010101010110111011101110111 01110111011112111211121112111211121122122212221222122212 221222222222222232323223232110111101122222244454444 4454443332333332332322322323334333334333334333434 343434334343434334343434343343434343434344434443 4443444344 Artificial Neural Network Se ha probado una red perceptrón multicapa o de retro propagación, por ser de los clasificadores de mejor desempeño. Tendrá 5 entradas Calculará el peso de cada entrada sobre la decisión final. La salida de cada neurona será 1 si la decisión es verdadera o falso de lo contrario. La salida de la red será binaria. ANN – Multilayer Perceptron Lenta en el entrenamiento. Utiliza el descenso de gradiente para minimizar el error mediante el ajuste de las conexiones ponderadas entre los nodos de clasificación numérica dentro de las capas. Rápida bajo prueba. Sólo una serie de productos punto seguido por una función squashing. Perceptron: yout = wT x 1 2 N Datos: ( x , y1 ), ( x , y 2 ),..., ( x , y N ) 2 T t 2 E ( t ) = ( y ( t ) − y ) = ( w ( t ) x − y ) Error: out t t Entrenamiento: ∂ ( w(t )T x t − yt ) 2 ∂E (t ) wi (t + 1) = wi (t ) − c ⋅ = wi (t ) − c ⋅ ∂wi ∂wi wi (t + 1) = wi (t ) − c ⋅ ( w(t ) T x t − yt ) ⋅ xit m w(t ) x = ∑ w j (t ) ⋅ x tj T j =1 Datos de Entrenamiento Características geométricas y morfológicas 325, 201, 53476, 814, 1.616915, 1.012365, 1.221576, 2.506873, 1.548923 Resultados En la primera versión, se generaron 2 modelos, uno de hojas sanas y otro de hojas enfermas con HMM. Número de hojas sanas reconocidas Hojas Reconocidas Total Muestra Entrenadas 9 12 De prueba 7 9 Número de hojas enfermas reconocidas Hojas Reconocidas Total Muestra Entrenadas 10 12 De prueba 7 8 Resultados A partir de 2 modelos, ANN y HMM, se obtuvo una versión final con el siguiente desempeño: Hojas Sanas Reconocidas Total Muestra Entrenadas % De prueba ANN HMM 24 29 80 96.66 15 13 % 93.75 30 16 81.25 Hojas Enfermas ANN HMM Entrenadas 26 29 30 % 86.66 96.66 De prueba % 14 13 87.5 81.25 16 Conclusiones • El diagnóstico por contorno es más simple de implementar que por color. • El análisis por contorno puede ser más barato y rápido que por color. • Es necesario utilizar otras formas de segmentación y análisis, además del espectro visible.