domingo, 19 de janeiro de 2014

Operador Morfológico: Dilatação

Operadores morfológicos processam imagens com base em formas. Operações morfológicas aplicam um elemento estruturante em uma imagem de entrada e geram uma imagem de saída. Os operadores morfológicos mais básicos são: Erosão e Dilatação.
Dentre as suas principais aplicações encontram-se:
  • Remoção de ruído;
  • Isolamento de elementos individuais
  • Juntar elementos díspares em uma imagem;
  • Descoberta de colisões de intensidade e/ou buracos em uma imagem.
Dilatação: Esta operação consiste em uma convolução de uma imagem A com algum kernel/máscara (B), que pode ter qualquer forma ou tamanho, geralmente formas quadrada ou circulares. O kernel/máscara (B) tem um ponto de ancoragem definido, geralmente o centro do próprio kernel/máscara. Isto faz com que as regiões brilhantes (claras) da imagem cresçam, ficando em evidência, criando um efeito de máximo local. Observer a imagem original e as duas seguintes são os resultados da aplicação do operador morfológico de dilatação com os valores de entrada para a máscara de 1 e 2, respectivamente.

Imagem original - Modelo Lenna Söderberg

Imagem resultante do operador de dilatação com entrada igual à 1.
Imagem resultante do operador de dilatação com entrada igual à 2.

Imagem resultante do operador de dilatação com entrada igual à 3.
Observa-se que quanto maior o valor de entrada para o kernel (encontrado na literatura também como template ou máscara) maior será a dilatação das áreas mais claras da imagem. Em linguagem C está o código a seguir para a versão 2.4 do OpenCV:

#include <opencv/cv.h>
#include <opencv/highgui.h>
void dilate(IplImage *original) {
IplImage *imgDilatada = cvCloneImage(original);
cvDilate(original, imgDilatada, NULL, 3); //Aqui se define o valor para a máscara 1, 2, 3...
cvSaveImage("./src/filtered/Lenna_Söderberg_Dilatada_3.jpg", imgDilatada, 0);
cvNamedWindow("Original", CV_WINDOW_AUTOSIZE);
cvShowImage("Original", original);
cvNamedWindow("Filtrada", CV_WINDOW_AUTOSIZE);
cvShowImage("Filtrada", imgDilatada);
cvWaitKey(0);
cvDestroyWindow("Original");
cvDestroyWindow("Filtrada");
cvReleaseImage(&original);
cvReleaseImage(&imgDilatada);
}
int main() {
IplImage *original;
original = cvLoadImage("./src/pictures/Lenna_Söderberg.png", -1);
dilate(original);
return 0;
}

No próximo post, demonstraremos a aplicação do operador morfológico de erosão. 

Nenhum comentário:

Postar um comentário