You are on page 1of 42

Taller 1: Fundamentos - Histograma

Técnicas de Inteligencia Artificial: Visión de Máquina

Prof. Flavio Prieto
email: faprietoo@unal.edu.co Ingeniería Mecatrónica Facultad de Ingeniería Universidad Nacional de Colombia Sede Bogotá

22 de marzo de 2013

Prof. Flavio Prieto

Técnicas de Inteligencia Artificial: Visión de Máquina

1

Sitio de interés.

Basic Structures and Operations Reference: http://www710.univ-lyon1.fr/∼bouakaz/OpenCV0.9.5/docs/ref/OpenCVRef_BasicFuncs.htm

Prof. Flavio Prieto

Técnicas de Inteligencia Artificial: Visión de Máquina

2

Fundamentos.

Funciones cvCreateImage cvLoadImage,cvInvert,cvMatMulAdd... Tipos de Datos propios de OpenCV CvScalar CvHistogram,CvMat...

Prof. Flavio Prieto

Técnicas de Inteligencia Artificial: Visión de Máquina

3

Fundamentos.
Puntos CvPoint p = cvPoint( x , y ); CvPoint2D32f p =cvPoint2D32f(xf,yf); CvPoint3D32f p =cvPoint3D32f (xf,yf,zf); Escalares CvScalar Color1 = cvScalar (b,g,r); CvScalar Color1 = cvScalar (255,255,255); CvScalar Valor; Valor.val[0];

Prof. Flavio Prieto

Técnicas de Inteligencia Artificial: Visión de Máquina

4

height). y . Tamaño CvSize CvSize T = cvSize(width. width. Rectangulos CvRect CvRect R = cvRect( x . Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 5 .Fundamentos. Prof. height).

Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 6 . Matrices Prof.Fundamentos.

CV32FC1). cvMat* Matriz1 = cvCreateMat (3.3. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 7 . int Tipo ) . Prof. Matrices CvMat* cvCreateMat ( int Filas .Fundamentos. int Columnas .

Fundamentos. Funciones para Operaciones entre Matrices Dentro de las funciones para operar matrices openCV ofrece más de 70 posibilidades: Prof. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 8 .

que si no es nulo (NULL). que contiene parámetros de la región seleccionada. Las imágenes en escala de grises tienen un sólo canal. lo que se conoce como regiones de interés (ROI). Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 9 . Es posible seleccionar algunas partes rectangulares de la imagen.Fundamentos. apunta a la estructura IplROI. mientras que las de color tienen 3 o 4 canales. IplImage Una imagen en OpenCV se representa mediante una estructura IplImage. Prof. en la que todos los píxeles son almacenados en un array unidimensional para acceder a ellos linealmente. La estructura IplImage contiene el campo roi.

IPL_DEPTH _8U: Enteros sin signo de 8 bits (unsigned char) _8S: Enteros con signo de 8 bits (signed char o simplemente char) _16S: Enteros de 16 bits con signo (short int) _32S: Enteros con signo de 32 bits (int) _32F: Números en punto flotante con precisión simple de 32 bits (float). Declaración IplImage* imagen=NULL.3) . Creación IplImage* img=cvCreateImage(cvSize(640.IPL_DEPTH_32F.Fundamentos.480). Carga Imagen imagen=cvLoadImage(foto. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 10 . Prof.1).

int idx0. Prof. int idx1 ). Donde: arr: array en el cual vamos a buscar el valor del elemento deseado. Acceso a una Imagen o Arreglo Se basa en la utilización de las funciones cvGet2D y cvSet2D que se encargan de encontrar elementos de un array y configurar los elementos de un array respectivamente.Fundamentos. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 11 . idy1: índice de columnas del elemento. CvScalar cvGet2D( const CvArr* arr. idx0: índice de filas del elemento.

10. s.IPL_DEPTH_8U. s=cvGet2D(img. printf(“ Valor = %f \n ”. IplImage*img=cvCreateImage(cvSize(640. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 12 .Fundamentos.20). Prof.1). Ejemplo CvScalar s.val[0]).480).

int width = img->width. Prof.Fundamentos. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 13 . int step = img->widthStep . int channels = img->nChannels. Acceso Directo int height = img->height.

Prof. cvReleaseHist(&). Liberar Memoria cvReleaseImage( &img1 ). Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 14 .Fundamentos. cvReleaseMat(& ). Cerrar Ventanas cvDestroyAllWindows(). cvReleaseStereoGCState(&). cvReleaseStereoBMState(&).

CvRect Recuadro). cvResetImageROI(IplImage*Imagen). Prof. ROI Para muchas aplicaciones de procesamiento de imágenes se debe trabajar con secciones de las imágenes pero dejando intacto el resto de la imagen para esto openCv tiene una función que resuelve este problema de forma eficiente: cvSetImageROI(IplImage*Imagen.Fundamentos. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 15 .

Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 16 . El histograma es una función de densidad de probabilidad de niveles de gris la cual relaciona las abscisas operando con el rango posible de intensidades de gris y las ordenadas operando con el número de píxeles para cada nivel de gris.Histograma. Prof.

. Prof.hist_image = cvCreateImage(cvSize(320. .Histograma.200).IplImage* hist_image=0.CvHistogram *hist. Inicialización del programa Se deben inicialmente asignar los recursos de memoria para operación. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 17 .int hist_size = 64. . 8. . 1). .256. . carga y creación del histograma en función de las imágenes.float range_0[]=0.IplImage* image=0. .IplImage* dst=0.

Imagen CvHistogram* hist. Dimensiones int* sizes. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 18 . Funciones de Histograma cvCreateHist( int dims. Rango de Variación (0-256) int uniform CV_DEFAULT(1)). Limpia antes de calcular const CvArr* mask CV_DEFAULT(NULL) ) Calcula el histograma para valores específicos Prof. Número de bins en cada dimensión int type. Histograma Resultado int accumulate CV_DEFAULT(0). Bins Uniformes Interpretación cvCalcHist( IplImage** image. Tipo (CV_HIST_ARRAY) float** ranges CV_DEFAULT(NULL).Histograma.

Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 19 . Ejemplo Histograma Prof.Histograma.

Histograma. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 20 . Ejemplo Histograma Prof.

Histograma. Ejemplo Histograma Prof. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 21 .

esto es. Ecualización Histograma La ecualización del histograma de una imagen es una transformación que pretende obtener para una imagen un histograma con una distribución uniforme. El resultado de la ecualización maximiza el contraste de una imagen sin perder información de tipo estructural.cvEqualizeHist( const CvArr* src.Histograma. Esquema: . CvArr* dst ). conservando su Entropía (información). Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 22 . Prof.

Histograma. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 23 . Ecualización Histograma Prof.

Ecualización Histograma Prof. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 24 .Histograma.

double cvQueryHistValue_nD(* hist. int* idxN). double cvQueryHistValue_2D(* hist. float* cvGetHistValue_2D(* hist. int idx0.cvQueryHistValue_Dimensión . float* cvGetHistValue_1D(* hist. se utilizan las siguientes instrucciones con el mismo resultado . int* idxN). Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 25 . int idx0). Manipulación Básica del Histograma Para acceder al valor de un nivel de gris definido. float* cvGetHistValue_nD(* hist. int idx0).Histograma. Prof. int idx0. int idx1). int idx1).cvGetHistValue_Dimensión double cvQueryHistValue_1D(* hist.

Para cargar el valor de la función en la variable indicada se utiliza &.cvGetMinMaxHistValue(hist. float* min_value. Cálculo de valores Máximos y Mínimos Si se requieren obtener los Niveles de gris de mayor y menor influencia en la imagen y el número de píxeles implicados.cvGetMinMaxHistValue( const CvHistogram* hist. .0. int* max_idx CV_DEFAULT(NULL)). se utiliza la función: cvGetMinMaxHistValue . &max. float* max_value.&max_idx). int* min_idx CV_DEFAULT(NULL).0. Prof. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 26 .Histograma.

Intersección. . int method). con el argumento method se pueden selecciona la distancia estadística deseada.Chi-cuadrado.Correlación. const CvHistogram* hist2. .Histograma. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 27 . .Distancia de Bhattacharyya. Comparación de Histogramas Para comparar el valor de dos histogramas se utiliza la función cvCompareHist double cvCompareHist( const CvHistogram* hist1. Prof. .

H2 ) = ˜2 ˜2 i H1 (i ) · H2 (i ) ˜ es Donde H ˜ k (i ) = Hk (i ) − (1/N )( H j Hk (j )) N es el número de bins del histagrama.Histograma. -1 Divergencia máxima. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 28 . Comparación de Histogramas Correlación Es un índice estadístico que mide la relación lineal entre dos variables cuantitativas. 1 Coincidencia perfecta. +1].su valor varía en el intervalo [-1. ˜ ˜ i H1 (i ) · H2 (i ) dcorrel (H1 . Prof. 0 Indica que no hay correlación.

Histograma. dchi −square = i (H1 (i ) − H2 (i ))2 H1 (i ) + H2 (i ) Para valores bajos mayor similitud. Prof. un desajuste total es ilimitado. 0 indica una combinación perfecta. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 29 . Comparación de Histogramas method Chi-cuadrado.

dintersection (H1 . valores bajos indican baja similitud. H2 (i )) Los valores altos indican similitud. H2 ) = min(H1 (i ).Histograma. Si los histogramas se normalizan la pareja perfecta en 1 y el desajuste total es 0. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 30 . Comparación de Histogramas Intersección. Prof.

dBhattacharyya = 1− i H1 (i ) · H2 (i ) i H1 (i ) · i H2 (i ) Los valores bajos indican buena similitud. Para una pareja perfecta el valor es 0 y un desajuste total es un 1. Comparación de Histogramas Distancia de Bhattacharyya.Histograma. Prof. y los valores altos indican mala similitud. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 31 .

Comparación de Histogramas Prof.Histograma. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 32 .

Comparación de Histogramas Prof. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 33 .Histograma.

000000 Comparación BHATTACHARYYA 0.000000 Comparación CHISQR 0.000000 Comparación Histograma Normalizado Comparación Correlacion 1.Histograma.000000 Comparación INTERSECT 103950. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 34 .000000 Comparación CHISQR 0.000000 Comparación INTERSECT 1.000000 Comparación BHATTACHARYYA 0. Comparación de Histogramas Comparación Histograma No Normalizado Comparación Correlacion 1.000000 Prof.

Histograma. Comparación de Histogramas Prof. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 35 .

000000 Comparación BHATTACHARYYA 0.102689 Comparación Histograma Normalizado Comparación Correlación 0. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 36 .941842 Comparación BHATTACHARYYA 0.Histograma.998897 Comparación CHISQR 47731.354917 Comparación INTERSECT 26075. Comparación de Histogramas Comparación Histograma No Normalizado Comparación Correlacion 0.998897 Comparación CHISQR 0.102689 Prof.039298 Comparación INTERSECT 0.

Comparación de Histogramas Prof. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 37 .Histograma.

Histograma.256404 Comparación BHATTACHARYYA 0.620373 Prof. Comparación de Histogramas Comparación Histograma No Normalizado Comparación Correlacion 0.641100 Comparación CHISQR 1. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 38 .000000 Comparación BHATTACHARYYA 0.184339 Comparación INTERSECT 0.641100 Comparación CHISQR 238857.620373 Comparación Histograma Normalizado Comparación Correlacion 0.471875 Comparación INTERSECT 37601.

Normalización de Histogramas Para todas las distancias estadísticas estudiadas es recomendable normalizar los histogramas para que los resultados tengan sentido. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 39 . a pesar de que las instrucciones permitan el cálculo sin normalizar. Para normalizar un histograma se utiliza la función cvNormalizeHist .Histograma. double factor ).cvNormalizeHist( CvHistogram* hist. Prof.

cvThreshHist( CvHistogram* hist. double factor ). todos los bins por debajo del umbral toman el valor de 0. Umbralización de Histogramas Para umbralizar un histograma con el umbral deseado. Donde el segundo argumento indica el umbral deseado. se utiliza la función cvThreshHist . Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 40 . Prof.Histograma.

Histograma. CvHistogram** dst ). Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 41 .void cvCopyHist(const CvHistogram* src. Prof. Copia de Histogramas La función para copiar un histograma en otro es cvCopyHist .

En el ejercicio los tipos de iluminación son: Iluminación en interior. Kaehler. Para el ejercicio considere las imágenes en niveles de gris y no en color (RGB). Iluminación en exterior un día con sol. Iluminación en exterior un día con sombra.G. Bradsky and A.Tarea. Desarrolle el ejercicio 2 del Capítulo 7 del libro (página 219): Learning OpenCV . Prof. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 42 .