Anda di halaman 1dari 64

Introduccion al uso de OpenCV (2)

Dr. J.B. Hayet


CENTRO DE INVESTIGACION EN MATEMATICAS

Agosto 2007

, J.B. Hayet OpenCV parte 2, Agosto 2007 1 / 64

Outline
1

OpenCV : funcionalidades de procesamiento de imgenes a OpenCV : funcionalidades de geometr a OpenCV y IPP Usando scripts : los wrappers Python Tricks

, J.B. Hayet OpenCV parte 2, Agosto 2007 2 / 64

Procesamiento de imgenes con OpenCV a

OpenCV contiene un gran numero de funcionalidades entre las mas clsicas de procesamiento de imgenes : ltrados, derivacin, a a o operadores morfolgicos. . . o Recorrer la documentacin para vericar si una funcin dada esta o o implementada o no.

, J.B. Hayet OpenCV parte 2, Agosto 2007 3 / 64

Image Processing
Gradients, Edges and Corners Sampling, Interpolation and Geometrical Transforms Morphological Operations Filters and Color Conversion Pyramids and the Applications Image Segmentation, Connected Components and Contour Retrieval Image and Contour Moments Special Image Transforms Histograms Matching
, J.B. Hayet OpenCV parte 2, Agosto 2007 4 / 64

Structural Analysis

Contour Processing Computational Geometry Planar Subdivisions

, J.B. Hayet OpenCV parte 2, Agosto 2007 5 / 64

Motion Analysis and Object Tracking

Accumulation of Background Statistics Motion Templates Object Tracking Optical Flow Estimators

, J.B. Hayet OpenCV parte 2, Agosto 2007 6 / 64

Pattern Recognition

Object Detection

, J.B. Hayet OpenCV parte 2, Agosto 2007 7 / 64

Camera Calibration and 3D Reconstruction

Camera Calibration Pose Estimation Epipolar Geometry

, J.B. Hayet OpenCV parte 2, Agosto 2007 8 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Outline
1

OpenCV : funcionalidades de procesamiento de imgenes a OpenCV : funcionalidades de geometr a OpenCV y IPP Usando scripts : los wrappers Python Tricks

, J.B. Hayet OpenCV parte 2, Agosto 2007 9 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Conversin entre espacios de color o

v o i d c v C v t C o l o r ( const CvArr s r c , CvArr d s t , i n t code ) ;

Con el code de la forma siguiente CV ESPA12ESPA2, donde ESPA1 y ESPA2 pueden ser entre : BGR, RGB, XYZ, YCrCb, HSV

, J.B. Hayet OpenCV parte 2, Agosto 2007 10 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Umbral

Umbral :
double c v T h r e s h o l d ( const CvArr s r c , CvArr d s t , double t h r e s h o l d , double m a x v a l , i n t t h r e s h t y p e ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 11 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Filtros
v o i d c v F i l t e r 2 D ( const CvArr s r c , CvArr d s t , const CvMat k e r n e l , C v P o i n t a n c h o r=c v P o i n t ( 1 , 1));

Ejemplo de uso:
CvMat k e r n e l = c v C r e a t e M a t ( 1 1 , 1 1 , CV 32F ) ; cvSet ( kernel , c v S c a l a r ( 1 . / ( k e r n e l >rows k e r n e l >c o l s ) ) ) ; c v F i l t e r 2 D (A , B , k e r n e l , c v P o i n t ( k e r n e l >c o l s / 2 , k e r n e l >rows / 2 ) ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 12 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Filtros : smoothing

Una funcin de smoothing mas especializada que cvFilter2D : o


v o i d cvSmooth ( const CvArr s r c , CvArr d s t , i n t s m o o t h t y p e=CV GAUSSIAN , i n t param1 =3, i n t param2 =0, double param3 =0, double param4=0 ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 13 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Filtros : smoothing

Tipos de ltraje con cvSmooth:


# # # # # CV BLUR NO SCALE CV BLUR ( s i m p l e b l u r ) CV GAUSSIAN ( g a u s s i a n b l u r ) CV MEDIAN ( median b l u r ) CV BILATERAL

, J.B. Hayet OpenCV parte 2, Agosto 2007 14 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Derivadas y bordos
Sobel, Canny
v o i d c v S o b e l ( const CvArr s r c , CvArr d s t , int xorder , int yorder , i n t a p e r t u r e s i z e =3); v o i d cvCanny ( const CvArr image , CvArr e d g e s , double t h r e s h o l d 1 , double t h r e s h o l d 2 , i n t a p e r t u r e s i z e =3);

, J.B. Hayet OpenCV parte 2, Agosto 2007 15 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Derivadas y bordos

, J.B. Hayet OpenCV parte 2, Agosto 2007 16 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Derivadas y bordos

, J.B. Hayet OpenCV parte 2, Agosto 2007 17 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Laplaciano

, J.B. Hayet OpenCV parte 2, Agosto 2007 18 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Imgenes integrales a

Pueden revelarse muy utiles para clculos muy rpidos de sumas a a sobre ventanas (las Haar wavelets por ejemplo).
v o i d c v I n t e g r a l ( const CvArr image , CvArr sum , CvArr sqsum=NULL , CvArr t i l t e d s u m=NULL ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 19 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Pirmides gausianas a

Muy utiles para razonamiento multi-escala : Down-sampling y ltrado gausiano :


v o i d cvPyrDown ( const CvArr s r c , CvArr d s t , i n t f i l t e r =CV GAUSSIAN 5x5 ) ;

Up-sampling :
v o i d cvPyrUp ( const CvArr s r c , CvArr d s t , i n t f i l t e r =CV GAUSSIAN 5x5 ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 20 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Pirmides gausianas a

, J.B. Hayet OpenCV parte 2, Agosto 2007 21 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Morfolog matemtica a a
Flexibilidad en la denicin del elemento estructurante o
IplConvKernel cvCreateStructuringElementEx ( i n t c o l s , i n t rows , i n t anchx , i n t anchy , i n t shape , i n t v a l u e s=NULL ) ; c v R e l e a s e S t r u c t u r i n g E l e m e n t ( I p l C o n v K e r n e l e l ) ;

Elemento no necesariamente simtrico (anchor) e

, J.B. Hayet OpenCV parte 2, Agosto 2007 22 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Morfolog matemtica a a

Formas soportadas
CV SHAPE RECT CV SHAPE CROSS CV SHAPE ELLIPSE CV SHAPE CUSTOM

En caso de CUSTOM, se usan los valores del arreglo values

, J.B. Hayet OpenCV parte 2, Agosto 2007 23 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Morfolog matemtica a a

Operadores bsicos : a
v o i d c v E r o d e ( const CvArr s r c , CvArr d s t , I p l C o n v K e r n e l e l e m e n t=NULL , i n t i t e r a t i o n s =1); v o i d c v D i l a t e ( const CvArr s r c , CvArr d s t , I p l C o n v K e r n e l e l e m e n t=NULL , i n t i t e r a t i o n s =1);

, J.B. Hayet OpenCV parte 2, Agosto 2007 24 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Morfolog matemtica a a

, J.B. Hayet OpenCV parte 2, Agosto 2007 25 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Puntos de inters e
Todos los mtodos implementados son basados en la matriz de e autocorrelacin : o
v o i d c v C o r n e r M i n E i g e n V a l ( const CvArr img , CvArr e i g , i n t b l o c k s i z e , i n t a p s i z e =3); v o i d c v C o r n e r H a r r i s ( const CvArr image , CvArr d s t , i n t b l o c k s i z e , i n t a p s i z e =3, double k =0.04 ) ; v o i d c v F i n d C o r n e r S u b P i x ( const CvArr img , CvPoint2D32f c o r n e r s , i n t count , C v S i z e win , C v S i z e z e r o z o n e , CvTermCriteria c r i t e r i a ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 26 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

LK tracking

Mtodo de Lucas-Kanade para el seguimiento de puntos de inters e e (funciona bien para puntos de tipo esquinas, detectados por los operadores vistos antes)
v o i d c v C a l c O p t i c a l F l o w L K ( const CvArr p r e v , const CvArr c u r r , CvSize win size , CvArr v e l x , CvArr v e l y ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 27 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

LK tracking

, J.B. Hayet OpenCV parte 2, Agosto 2007 28 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Histogramas

t y p e d e f s t r u c t CvHis t ogram { int type ; CvArr b i n s ; float t h r e s h [ CV MAX DIM ] [ 2 ] ; / u n i f o r m h i s t . / f l o a t t h r e s h 2 ; / nonu n i f o r m h i s t . / CvMatND mat ; / m a t r i x h e a d e r f o r a r r a y h i s t . / } Cv His togram ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 29 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Histogramas

Cv His t ogram c v C r e a t e H i s t ( i n t dims , i n t s i z e s , i n t type , f l o a t r a n g e s=NULL , i n t u n i f o r m=1 ) ; v o i d c v R e l e a s e H i s t ( Cv His to gram h i s t ) ; v o i d c v N o r m a l i z e H i s t ( CvH is tog ram h i s t , double f a c t o r v o i d c v C a l c H i s t ( I p l I m a g e image , Cv His to gram h i s t , i n t a c c u m u l a t e =0, const CvArr mask=N #d e f i n e c v Q u e r y H i s t V a l u e 1 D ( h i s t , i d x 0 ) \ c vGetReal1D ( ( h i s t )>b i n s , ( i d x 0 ) ) #d e f i n e c v Q u e r y H i s t V a l u e 2 D ( h i s t , i d x 0 , i d x 1 ) \ c vGetReal2D ( ( h i s t )>b i n s , ( i d x 0 ) , ( i d x 1 ) ) #d e f i n e c v Q u e r y H i s t V a l u e 3 D ( h i s t , i d x 0 , i d x 1 , i d x 2 ) c vGetReal3D ( ( h i s t )>b i n s , ( i d x 0 ) , ( i d x 1 ) , ( i d x 2 )
, J.B. Hayet OpenCV parte 2, Agosto 2007 30 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Histogramas : ejemplo

, J.B. Hayet OpenCV parte 2, Agosto 2007 31 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Histogramas : comparacin o
Varias mtricas para histogramas : e
double c v C o m p a r e H i s t ( const Cv His t ogram h i s t 1 , const Cv His t ogram h i s t 2 , i n t method ) ; CV COMP CORREL CV COMP CHISQR CV COMP INTERSECT CV COMP BHATTACHARYYA

, J.B. Hayet OpenCV parte 2, Agosto 2007 32 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Transformada de Hough
Mtodo clsico de acumulacin para la deteccin de objetos e a o o parametrizados :
CvSeq c v H o u g h L i n e s 2 ( CvArr img , v o i d l i n e s t o r a g e , i n t method , double rho , double t h e t a , int thresh , double p a r 1 =0, double p a r 2 =0); CvSeq c v H o u g h C i r c l e s ( CvArr img , v o i d c i r c s t o r a g e , i n t method , double dp , double m i n d i s t , double p a r 1 =100 , double p a r 2 =100 , i n t m i n r a d i u s =0, i n t m a x r a d i u s =0);
, J.B. Hayet OpenCV parte 2, Agosto 2007 33 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Transformada de Hough : lineas rectas

, J.B. Hayet OpenCV parte 2, Agosto 2007 34 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Transformada de Hough : c rculos

, J.B. Hayet OpenCV parte 2, Agosto 2007 35 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Deteccin de caras o
Un ejemplo que viene por default con OpenCV:

, J.B. Hayet OpenCV parte 2, Agosto 2007 36 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Ada-boost con Haar wavelets

, J.B. Hayet OpenCV parte 2, Agosto 2007 37 / 64

OpenCV : funcionalidades de procesamiento de imgenes a

Ada-boost con Haar wavelets


La idea es hacer deteccin de objetos de una clase dada usando una o cascada de clasicadores dbiles (t e picamente, por una de las Haar wavelets)
CvSeq c v H a a r D e t e c t O b j e c t s ( const CvArr image , CvHaarClassifierCascade c CvMemStorage s t o r a g e , double s c a l e f a c t o r =1.1 , i n t m i n n e i g h b o r s =3, i n t f l a g s =0, C v S i z e m i n s i z e=c v S i z e ( 0 , 0 )

, J.B. Hayet OpenCV parte 2, Agosto 2007 38 / 64

OpenCV : funcionalidades de geometr a

Outline
1

OpenCV : funcionalidades de procesamiento de imgenes a OpenCV : funcionalidades de geometr a OpenCV y IPP Usando scripts : los wrappers Python Tricks

, J.B. Hayet OpenCV parte 2, Agosto 2007 39 / 64

OpenCV : funcionalidades de geometr a

Calibracin o

Por el momento, viene implementado un metodo clsico basado en a motivo 3D (Tsai) para estimar parametros intrinsecos y extrinsecos. Ademas tiene las herramientas necesarias para usarla muy simplemente en casos planos (deteccin de motivos de tipo ajedrez) o

, J.B. Hayet OpenCV parte 2, Agosto 2007 40 / 64

OpenCV : funcionalidades de geometr a

Calibracin o
Funcin de calibracin : o o
v o i d c v C a l i b r a t e C a m e r a 2 ( const CvMat o b j e c t p o i n t s , const CvMat i m a g e p o i n t s , const CvMat p o i n t c o u n t s , CvSize image size , CvMat i n t r i n s i c m a t r i x , CvMat d i s t o r t i o n c o e f f s , CvMat r o t v e c t o r s=NULL , CvMat t r a n s v e c t o r s=NULL , i n t f l a g s =0 ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 41 / 64

OpenCV : funcionalidades de geometr a

Calibracin o

, J.B. Hayet OpenCV parte 2, Agosto 2007 42 / 64

OpenCV : funcionalidades de geometr a

Calibracin: distorsin radial y tangencial o o

Correccin de la distorsin : o o
v o i d c v U n d i s t o r t 2 ( const CvArr s r c , CvArr d s t , const CvMat i n t r i n s i c m a t r i x , const CvMat d i s t o r t i o n c o e f f s ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 43 / 64

OpenCV : funcionalidades de geometr a

Calibracin : distorsin radial y tangencial o o

, J.B. Hayet OpenCV parte 2, Agosto 2007 44 / 64

OpenCV : funcionalidades de geometr a

Calculo de transformaciones geomtricas e


v o i d cvFindHomography ( const CvMat s r c p o i n t s , const CvMat d s t p o i n t s , CvMat homography ) ; i n t c v F i ndF undam en t a lM a t ( const CvMat p o i n t s 1 , const CvMat p o i n t s 2 , CvMat f u n d a m e n t a l m a t r i x , int method=CV FM RANSAC , double param1 =1. , double param2 =0.99 , CvMat s t a t u s=NULL ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 45 / 64

OpenCV : funcionalidades de geometr a

Estimacin de la pose (cmara calibrada) o a

v o i d cvPOSIT ( CvPOSITObject p o s i t o b j e c t , CvPoint2D32f i m a g e p o i n t s , double f o c a l l e n g t h , CvTermCriteria c r i t e r i a , CvMatr32f r o t a t i o n m a t r i x , CvVect32f t r a n s l a t i o n v e c t o r ) ;

La estructura CvPOSITObject contiene los puntos 3D del objeto sobre el cual nos localizamos.

, J.B. Hayet OpenCV parte 2, Agosto 2007 46 / 64

OpenCV : funcionalidades de geometr a

Geometr epipolar a

Lineas epipolares correspondientes de unos puntos 2D


void cvComputeCorrespondEpilines ( const CvMat p o i n t s , i n t which image , const CvMat f u n d a m e n t a l m a t r i x , CvMat c o r r e s p o n d e n t l i n e s ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 47 / 64

OpenCV y IPP

Outline
1

OpenCV : funcionalidades de procesamiento de imgenes a OpenCV : funcionalidades de geometr a OpenCV y IPP Usando scripts : los wrappers Python Tricks

, J.B. Hayet OpenCV parte 2, Agosto 2007 48 / 64

OpenCV y IPP

IPP

IPP (Integrated Performance Primitives) es una parte de las bibliotecas de computo desarrolladas por Intel para aprovechar de las caracter sticas mas avanzadas de sus procesadores (SIMD) Provee funciones soportando el multi-core, y muy bien optimizadas Soporte 64 bits

, J.B. Hayet OpenCV parte 2, Agosto 2007 49 / 64

OpenCV y IPP

IPP : dnde esta la magia ? o

Funcionalidad SIMD (single instruction, multiple data) : registros de 64 o 128 bits. Un registro de 128 bits puede contener 4 int, 4 oat Intel: MMX y luego SSE (Streaming SIMD extension) En general, adaptado a toda clase de problemas vectorizables (muchos tratamientos locales independientes Cuidado al alineamiento de los datos

, J.B. Hayet OpenCV parte 2, Agosto 2007 50 / 64

OpenCV y IPP

IPP: Scope

Video encoding/decoding Procesamiento de imagenes Vectores y matrices Procesamiento del hablar

Audio decoding/encoding Vision JPEG/JPEG2000 Rendido

Compresin de datos o Procesamiento seal n Criptograa ... de

, J.B. Hayet OpenCV parte 2, Agosto 2007 51 / 64

OpenCV y IPP

Ejemplo

I p p S t a t u s ippiRGBToGray <mod>( const Ipp <d a t a t y p e > pSrc , i n t s r c S t e p , Ipp <d a t a t y p e > pDst , i n t d s t S t e p , I p p i S i z e r o i S i z e ) ;

Valores de mod: 8u C3C1R 16 u C3C1R 16 s C3C1R 32 f C3C1R 8u AC4C1R 16 u AC4C1R 16 s AC4C1R 32 f AC4C1R

, J.B. Hayet OpenCV parte 2, Agosto 2007 52 / 64

OpenCV y IPP

Cuanto se mejoran las performancias

Tipo de funcionalidad Incremento de velocidad Piramides gausianas 3 Morfolog a 3 7 Convolucion linear 2 8 Conversion color 1 3 Deteccin de esquinas o 1.8

, J.B. Hayet OpenCV parte 2, Agosto 2007 53 / 64

OpenCV y IPP

IPP y OpenCV

Llamadas a funciones estn integradas a una gran parte de a OpenCV Se decide en el tiempo de la ejecucin si se usa o no IPP o Para que se use, se necesita poner unas variables de entorno (de tal manera que las librer de IPP estn en el path) as e

, J.B. Hayet OpenCV parte 2, Agosto 2007 54 / 64

OpenCV y IPP

IPP y OpenCV
Vericar que s se usa IPP:
const char p l u g i n i n f o= 0 ; c v G e t M o d u l e I n f o (0 , 0 ,& p l u g i n i n f o ) ; i p p i s u s e d= ( p l u g i n i n f o != 0 ) && s t r s t r ( p l u g i n i n f o , ipp )!=0;

Apagar el uso de IPP y ponerlo otra vez:


cvUseOptimized ( 0 ) ; . . . cvUseOptimized ( 1 ) ;

, J.B. Hayet OpenCV parte 2, Agosto 2007 55 / 64

Usando scripts : los wrappers Python

Outline
1

OpenCV : funcionalidades de procesamiento de imgenes a OpenCV : funcionalidades de geometr a OpenCV y IPP Usando scripts : los wrappers Python Tricks

, J.B. Hayet OpenCV parte 2, Agosto 2007 56 / 64

Usando scripts : los wrappers Python

Python y OpenCV

Uso de Python ideal para prototipos, preparar demos Wrappers generados automticamente (SWIG) a Instalado automticamente (necesita SWIG) a Memoria manejada automticamente a

, J.B. Hayet OpenCV parte 2, Agosto 2007 57 / 64

Usando scripts : los wrappers Python

Python y OpenCV
No hay IplImage ac, solo CvMat a Iteratores
x = c v C r e a t e M a t (m, n , t y p e ) f o r row i n x : # row i s same a s t h a t r e t u r n e d by cvGetRow

o:
for col in x . colrange ( ) : # c o l i s same a s t h a t r e t u r n e d by c v G e t C o l

, J.B. Hayet OpenCV parte 2, Agosto 2007 58 / 64

Usando scripts : los wrappers Python

Python y OpenCV

Aceso por el operador [], notaciones a la Matlab


col = x [: , i ] s l i c e = x [0:10 , 0:10] elem1 = x [ i , j ] elem2 = x [ i ] [ j ] x [: , :] = 1 x [0:10 , i ] = [0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9]

, J.B. Hayet OpenCV parte 2, Agosto 2007 59 / 64

Usando scripts : los wrappers Python

Python y OpenCV

Informacin muy util en cuanto a la interfase Python : o http://opencvlibrary.sourceforge.net/PythonInterface

, J.B. Hayet OpenCV parte 2, Agosto 2007 60 / 64

Tricks

Outline
1

OpenCV : funcionalidades de procesamiento de imgenes a OpenCV : funcionalidades de geometr a OpenCV y IPP Usando scripts : los wrappers Python Tricks

, J.B. Hayet OpenCV parte 2, Agosto 2007 61 / 64

Tricks

Uso de la memoria

La memoria esta manejada ` la C: cuidado de bien liberar los a espacios reservados por las funciones de tipo Create o Clone.
cvReleaseImage cvReleaseMat ...

, J.B. Hayet OpenCV parte 2, Agosto 2007 62 / 64

Tricks

Soporte de funciones en sitio

Checar en la documentacion si la funcion que se usa soporta un procesamiento en sitio (dst=src). Una mayor de funciones s lo a soportan.

, J.B. Hayet OpenCV parte 2, Agosto 2007 63 / 64

Tricks

Alineacin de datos o

Para optimizar el tratamiento de los datos, es mejor alinear las lineas sobre 4 o 8 octetos (es automtico con funciones de tipo create) a

, J.B. Hayet OpenCV parte 2, Agosto 2007 64 / 64

Anda mungkin juga menyukai