terça-feira, 13 de maio de 2008

Morfologia matemática no OpenCV

Eu já fiz um post sobre morfologia matemática, em que abordava aspectos teóricos desta técnica.
Neste post, gostaria de apresentar as funções do OpenCV que implementam a questão do elemento estruturante e as operações morfológicas de erosão e dilatação.

Primeiramente a função que cria o elemento estruturante:
IplConvKernel* cvCreateStructuringElementEx( int cols,
int rows,
int anchor_x,
int anchor_y,
int shape,
int* values=NULL );

cols: Número de colunas no elemento estruturante

rows: Número de linhas no elemento estruturante

anchor_x: Offset horizontal relativo do ponto de âncora, normalmente igual a 0 (zero)

anchor_y: Offset vertical relativo do ponto de âncora, normalmente igual a 0 (zero)

shape: Tipo de elemento estruturante, possíveis valores:
  • CV_SHAPE_RECT, elemento retangular;
  • CV_SHAPE_CROSS, elemento em disco;
  • CV_SHAPE_ELLIPSE, elemento eliptico;
  • CV_SHAPE_CUSTOM, elemento definido pelo usuário. Neste caso, o parâmetro values especifica a máscara, delimitando a vizinhança do pixel considerado.
values: Ponteiro para um elemento estruturante definido pelo usuário, este parâmetro é usado apenas quando shape =CV_SHAPE_CUSTOM.

Função de erosão
void cvErode( const CvArr* src, CvArr* dst,
IplConvKernel* element=NULL, int iterations=1 );
Função de dilatação
void cvDilate( const CvArr* src, CvArr* dst,
IplConvKernel* element=NULL, int iterations=1 );
src: Imagem original;
dst: Imagem de destino;
element: Elemento estruturante usado. Se for NULL, é definido um retângulo de 3x3;
iterations: Número vezes que a operação é aplicada.
As interfaces para desenvolvimento em Python é a mesma, com a vantagem que todas as funções são implementadas em C, o que torna a execussão da função extremamente rápida.

Fonte das informações: http://www.comp.leeds.ac.uk/vision/opencv/opencvref_cv.html

2 comentários:

Felipe Berla disse...

Parabéns pelo post. Me ajudou bastante, simples e direto.

A garota. disse...

Muito bom!!!