3_t1_opencv
TRANSCRIPT
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
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