3_T1_OpenCV

Preview:

Citation preview

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

Prof. Flavio Prietoemail: faprietoo@unal.edu.co

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

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

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

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

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

Fundamentos.

Matrices

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

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

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

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

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

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

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

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

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

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

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

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

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

Histograma.

Ejemplo Histograma

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

Histograma.

Ejemplo Histograma

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

Histograma.

Ejemplo Histograma

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

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

Histograma.

Ecualización Histograma

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

Histograma.

Ecualización Histograma

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

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

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

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

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

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

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

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

Histograma.

Comparación de Histogramas

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

Histograma.

Comparación de Histogramas

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

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

Histograma.

Comparación de Histogramas

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

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

Histograma.

Comparación de Histogramas

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

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

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

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

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

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