42
Taller 1: Fundamentos - Histograma Técnicas de Inteligencia Artificial: Visión de Máquina Prof. Flavio Prieto email: [email protected] 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

3_T1_OpenCV

Embed Size (px)

Citation preview

Page 1: 3_T1_OpenCV

Taller 1: Fundamentos - HistogramaTécnicas de Inteligencia Artificial: Visión de Máquina

Prof. Flavio Prietoemail: [email protected]

Ingeniería MecatrónicaFacultad 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

Page 2: 3_T1_OpenCV

Sitio de interés.

I Basic Structures and Operations Reference:

http://www710.univ-lyon1.fr/∼bouakaz/OpenCV-0.9.5/docs/ref/OpenCVRef_BasicFuncs.htm

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

Page 3: 3_T1_OpenCV

Fundamentos.

I FuncionescvCreateImagecvLoadImage,cvInvert,cvMatMulAdd...

I Tipos de Datos propios de OpenCVCvScalarCvHistogram,CvMat...

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

Page 4: 3_T1_OpenCV

Fundamentos.

PuntosCvPoint 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

Page 5: 3_T1_OpenCV

Fundamentos.

TamañoCvSizeCvSize T = cvSize(width, height);

Rectangulos

CvRectCvRect R = cvRect( x , y , width, height);

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

Page 6: 3_T1_OpenCV

Fundamentos.

Matrices

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

Page 7: 3_T1_OpenCV

Fundamentos.

Matrices

CvMat* cvCreateMat ( int Filas , int Columnas , int Tipo ) ;

cvMat* Matriz1 = cvCreateMat (3,3,CV32FC1);

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

Page 8: 3_T1_OpenCV

Fundamentos.

Funciones para Operaciones entre MatricesDentro de las funciones para operar matrices openCV ofrecemás de 70 posibilidades:

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

Page 9: 3_T1_OpenCV

Fundamentos.

IplImageI Una imagen en OpenCV se representa mediante una

estructura IplImage, en la que todos los píxeles sonalmacenados en un array unidimensional para acceder aellos linealmente.

I Las imágenes en escala de grises tienen un sólo canal,mientras que las de color tienen 3 o 4 canales.

I Es posible seleccionar algunas partes rectangulares de laimagen, lo que se conoce como regiones de interés (ROI).La estructura IplImage contiene el campo roi, que si no esnulo (NULL), apunta a la estructura IplROI, que contieneparámetros de la región seleccionada.

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

Page 10: 3_T1_OpenCV

Fundamentos.

DeclaraciónIplImage* imagen=NULL;Carga Imagenimagen=cvLoadImage(foto,1);CreaciónIplImage*img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3) ;IPL_DEPTH

I _8U: Enteros sin signo de 8 bits (unsigned char)I _8S: Enteros con signo de 8 bits (signed char o

simplemente char)I _16S: Enteros de 16 bits con signo (short int)I _32S: Enteros con signo de 32 bits (int)I _32F: Números en punto flotante con precisión simple de

32 bits (float).

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

Page 11: 3_T1_OpenCV

Fundamentos.

Acceso a una Imagen o ArregloSe basa en la utilización de las funciones cvGet2D y cvSet2Dque se encargan de encontrar elementos de un array yconfigurar los elementos de un array respectivamente.

CvScalar cvGet2D( const CvArr* arr, int idx0, int idx1 );

Donde:arr: array en el cual vamos a buscar el valor del elementodeseado.idx0: índice de filas del elemento.idy1: índice de columnas del elemento.

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

Page 12: 3_T1_OpenCV

Fundamentos.

Ejemplo

CvScalar s;

IplImage*img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);

s=cvGet2D(img,10,20);

printf(“ Valor = %f \n ”, s.val[0]);

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

Page 13: 3_T1_OpenCV

Fundamentos.

Acceso Directo

int height = img->height;

int width = img->width;

int step = img->widthStep ;

int channels = img->nChannels;

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

Page 14: 3_T1_OpenCV

Fundamentos.

Liberar Memoria

cvReleaseImage( &img1 );cvReleaseMat(& );cvReleaseHist(&);cvReleaseStereoGCState(&);cvReleaseStereoBMState(&);Cerrar Ventanas

cvDestroyAllWindows();

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

Page 15: 3_T1_OpenCV

Fundamentos.

ROI

Para muchas aplicaciones de procesamiento de imágenes sedebe trabajar con secciones de las imágenes pero dejandointacto el resto de la imagen para esto openCv tiene unafunción que resuelve este problema de forma eficiente:

cvSetImageROI(IplImage*Imagen,CvRect Recuadro);

cvResetImageROI(IplImage*Imagen);

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

Page 16: 3_T1_OpenCV

Histograma.

El histograma es una función de densidad de probabilidad deniveles de gris la cual relaciona las abscisas operando con elrango posible de intensidades de gris y las ordenadasoperando con el número de píxeles para cada nivel de gris.

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

Page 17: 3_T1_OpenCV

Histograma.

Inicialización del programa

Se deben inicialmente asignar los recursos de memoria paraoperación, carga y creación del histograma en función de lasimágenes.

- IplImage* image=0;- IplImage* dst=0;- IplImage* hist_image=0;

- CvHistogram *hist;

- int hist_size = 64;- float range_0[]=0,256;

- hist_image = cvCreateImage(cvSize(320,200), 8, 1);

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

Page 18: 3_T1_OpenCV

Histograma.

Funciones de Histograma

I cvCreateHist( int dims, Dimensionesint* sizes, Número de bins en cada dimensiónint type, Tipo (CV_HIST_ARRAY)float** ranges CV_DEFAULT(NULL), Rango de Variación(0-256)int uniform CV_DEFAULT(1)); Bins UniformesInterpretación

I cvCalcHist( IplImage** image, ImagenCvHistogram* hist, Histograma Resultadoint accumulate CV_DEFAULT(0), Limpia antes de calcularconst CvArr* mask CV_DEFAULT(NULL) ) Calcula elhistograma para valores específicos

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

Page 19: 3_T1_OpenCV

Histograma.

Ejemplo Histograma

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

Page 20: 3_T1_OpenCV

Histograma.

Ejemplo Histograma

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

Page 21: 3_T1_OpenCV

Histograma.

Ejemplo Histograma

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

Page 22: 3_T1_OpenCV

Histograma.

Ecualización Histograma

La ecualización del histograma de una imagen es unatransformación que pretende obtener para una imagen unhistograma con una distribución uniforme.

El resultado de la ecualización maximiza el contraste de unaimagen sin perder información de tipo estructural, esto es,conservando su Entropía (información).

Esquema:

- cvEqualizeHist( const CvArr* src, CvArr* dst );

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

Page 23: 3_T1_OpenCV

Histograma.

Ecualización Histograma

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

Page 24: 3_T1_OpenCV

Histograma.

Ecualización Histograma

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

Page 25: 3_T1_OpenCV

Histograma.

Manipulación Básica del Histograma

Para acceder al valor de un nivel de gris definido, se utilizan lassiguientes instrucciones con el mismo resultado

- cvQueryHistValue_Dimensión- cvGetHistValue_Dimensión

double cvQueryHistValue_1D(* hist, int idx0);double cvQueryHistValue_2D(* hist, int idx0, int idx1);double cvQueryHistValue_nD(* hist, int* idxN);

float* cvGetHistValue_1D(* hist, int idx0);float* cvGetHistValue_2D(* hist, int idx0, int idx1);float* cvGetHistValue_nD(* hist, int* idxN);

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

Page 26: 3_T1_OpenCV

Histograma.

Cálculo de valores Máximos y Mínimos

Si se requieren obtener los Niveles de gris de mayor y menorinfluencia en la imagen y el número de píxeles implicados, seutiliza la función: cvGetMinMaxHistValue

- cvGetMinMaxHistValue(const CvHistogram* hist,float* min_value,float* max_value,int* min_idx CV_DEFAULT(NULL),int* max_idx CV_DEFAULT(NULL));

Para cargar el valor de la función en la variable indicada seutiliza &.- cvGetMinMaxHistValue(hist,0, &max,0,&max_idx);

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

Page 27: 3_T1_OpenCV

Histograma.

Comparación de Histogramas

Para comparar el valor de dos histogramas se utiliza la funcióncvCompareHist

double cvCompareHist(const CvHistogram* hist1,const CvHistogram* hist2,int method);

con el argumento method se pueden selecciona la distanciaestadística deseada.

- Correlación.- Chi-cuadrado.- Intersección.- Distancia de Bhattacharyya.

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

Page 28: 3_T1_OpenCV

Histograma.

Comparación de HistogramasI Correlación

Es un índice estadístico que mide la relación lineal entredos variables cuantitativas,su valor varía en el intervalo [-1,+1].

I 1 Coincidencia perfecta.I -1 Divergencia máxima.I 0 Indica que no hay correlación.

dcorrel(H1,H2) =

∑i H̃1(i) · H̃2(i)√∑

i H̃21 (i) · H̃2

2 (i)

Donde H̃ es

H̃k (i) = Hk (i)− (1/N)(∑

j

Hk (j))

N es el número de bins del histagrama.Prof. Flavio Prieto Técnicas de Inteligencia Artificial: Visión de Máquina 28

Page 29: 3_T1_OpenCV

Histograma.

Comparación de Histogramas methodI Chi-cuadrado.

dchi−square =∑

i

(H1(i)− H2(i))2

H1(i) + H2(i)

I Para valores bajos mayor similitud,I 0 indica una combinación perfecta,I un desajuste total es ilimitado.

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

Page 30: 3_T1_OpenCV

Histograma.

Comparación de Histogramas

I Intersección.

dintersection(H1,H2) =∑

min(H1(i),H2(i))

I Los valores altos indican similitud,I valores bajos indican baja similitud.I Si los histogramas se normalizan la pareja perfecta en 1I y el desajuste total es 0.

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

Page 31: 3_T1_OpenCV

Histograma.

Comparación de Histogramas

I Distancia de Bhattacharyya.

dBhattacharyya =

√√√√1−∑

i

√H1(i) · H2(i)√∑

i H1(i) ·∑

i H2(i)

I Los valores bajos indican buena similitud,I y los valores altos indican mala similitud.I Para una pareja perfecta el valor es 0I y un desajuste total es un 1.

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

Page 32: 3_T1_OpenCV

Histograma.

Comparación de Histogramas

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

Page 33: 3_T1_OpenCV

Histograma.

Comparación de Histogramas

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

Page 34: 3_T1_OpenCV

Histograma.

Comparación de Histogramas

I Comparación Histograma No NormalizadoComparación Correlacion 1.000000Comparación CHISQR 0.000000Comparación INTERSECT 103950.000000Comparación BHATTACHARYYA 0.000000

I Comparación Histograma NormalizadoComparación Correlacion 1.000000Comparación CHISQR 0.000000Comparación INTERSECT 1.000000Comparación BHATTACHARYYA 0.000000

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

Page 35: 3_T1_OpenCV

Histograma.

Comparación de Histogramas

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

Page 36: 3_T1_OpenCV

Histograma.

Comparación de Histogramas

I Comparación Histograma No NormalizadoComparación Correlacion 0.998897Comparación CHISQR 47731.354917Comparación INTERSECT 26075.000000Comparación BHATTACHARYYA 0.102689

I Comparación Histograma NormalizadoComparación Correlación 0.998897Comparación CHISQR 0.039298Comparación INTERSECT 0.941842Comparación BHATTACHARYYA 0.102689

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

Page 37: 3_T1_OpenCV

Histograma.

Comparación de Histogramas

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

Page 38: 3_T1_OpenCV

Histograma.

Comparación de Histogramas

I Comparación Histograma No NormalizadoComparación Correlacion 0.641100Comparación CHISQR 238857.471875Comparación INTERSECT 37601.000000Comparación BHATTACHARYYA 0.620373

I Comparación Histograma NormalizadoComparación Correlacion 0.641100Comparación CHISQR 1.184339Comparación INTERSECT 0.256404Comparación BHATTACHARYYA 0.620373

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

Page 39: 3_T1_OpenCV

Histograma.

Normalización de Histogramas

Para todas las distancias estadísticas estudiadas esrecomendable normalizar los histogramas para que losresultados tengan sentido, a pesar de que las instruccionespermitan el cálculo sin normalizar.

Para normalizar un histograma se utiliza la funcióncvNormalizeHist

- cvNormalizeHist( CvHistogram* hist, double factor );

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

Page 40: 3_T1_OpenCV

Histograma.

Umbralización de Histogramas

Para umbralizar un histograma con el umbral deseado, seutiliza la función cvThreshHist

- cvThreshHist( CvHistogram* hist, double factor );

Donde el segundo argumento indica el umbral deseado, todoslos bins por debajo del umbral toman el valor de 0.

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

Page 41: 3_T1_OpenCV

Histograma.

Copia de Histogramas

La función para copiar un histograma en otro es cvCopyHist

- void cvCopyHist(const CvHistogram* src, CvHistogram** dst );

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

Page 42: 3_T1_OpenCV

Tarea.

Desarrolle el ejercicio 2 del Capítulo 7 del libro (página 219):Learning OpenCV - G. Bradsky and A. Kaehler.

En el ejercicio los tipos de iluminación son:I Iluminación en interior.I Iluminación en exterior un día con sombra.I Iluminación en exterior un día con sol.

Para el ejercicio considere las imágenes en niveles de gris y noen color (RGB).

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