segunda-feira, 16 de maio de 2011

Filtro Gaussiano

O filtro de gaussiano possibilita a redução de ruídos na imagem através do cálculo da distribuição normal (gauss ou gaussiana) dos números correspondentes aos pixels da máscara utilizada. No OpenCV as máscaras, para a correta utilização do filtro, devem ser MxN, onde M e N sejam números ímpares, podendo ser M = N. A seguir encontram-se quatro imagens: a primeira é uma imagem na forma original de captura, a segunda é o resultado da aplicação do filtro gaussiano com máscara 3x3, a terceira é o resultado da aplicação de uma máscara 5x5 e por fim uma imagem resultante da aplicação do filtro gaussiano com máscara 7x7.

Imagem original - Modelo Lenna Söderberg

Imagem após a aplicação do filtro de mediana com máscara de 3 x 3
Imagem após a aplicação do filtro de mediana com máscara de 5 x 5
Imagem após a aplicação do filtro gaussiano com máscara de 7 x 7


Em linguagem C está o código-fonte utilizado para gerar a última imagem (com máscara de 7x7) a seguir. Perceba, através da primeira linha de código, que utilizamos a biblioteca OpenCV, a qual deve ser instalada e  configurada para reproduzir o resultado do algoritmo.
#include <cv.h>
#include <highgui.h>

int main(int argc, char *argv[])
{
IplImage *original;
original = cvLoadImage("Lenna_Söderberg.png", -1);
IplImage *imgFiltroGaussiana = cvClone(original);
cvSmooth(original, imgFiltroGaussiana, CV_GAUSSIAN, 7, 7, 0, 0);
cvSaveImage("Lenna_Söderberg_Gaussiana_7x7.jpg",imgFiltroGaussiana, 0);
cvNamedWindow("Original",CV_WINDOW_AUTOSIZE);
cvShowImage( "Original", original);
cvNamedWindow("Filtro de Gaussiana",CV_WINDOW_AUTOSIZE);
cvShowImage( "Filtro de Gaussiana", imgFiltroGaussiana);
cvWaitKey(0);
cvDestroyWindow("Original");
cvDestroyWindow("Filtro de Gaussiana");
cvReleaseImage(&original);
cvReleaseImage(&imgFiltroGaussiana);
return 0;
}

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

domingo, 15 de maio de 2011

Filtro de Mediana

O filtro de mediana possibilita a redução de ruídos na imagem através do cálculo da mediana dos números correspondentes aos pixels da máscara utilizada. No OpenCV as máscaras, para a correta utilização do filtro, devem ser MxN, onde M e N sejam números ímpares, podendo ser M = N. A seguir encontram-se quatro imagens: a primeira é uma imagem na forma original de captura, a segunda é o resultado da aplicação do filtro de mediana com máscara 3x3, a terceira é o resultado da aplicação de uma máscara 5x5 e por fim uma imagem resultante da aplicação do filtro de mediana com máscara 7x7.

Imagem original - Modelo Lenna Söderberg
Imagem após a aplicação do filtro de mediana com máscara de 3 x 3

Imagem após a aplicação do filtro de mediana com máscara de 5 x 5

Imagem após a aplicação do filtro de mediana com máscara de 7 x 7

Em linguagem C está o código-fonte utilizado para gerar a última imagem (com máscara de 7x7) a seguir. Perceba, através da primeira linha de código, que utilizamos a biblioteca OpenCV, a qual deve ser instalada e  configurada para reproduzir o resultado do algoritmo.
#include <cv.h>
#include <highgui.h>
int main(int argc, char *argv[])
{
IplImage *temp;
temp = cvLoadImage("Lenna_Söderberg.png", -1);
IplImage *imgFiltroMediana = cvClone(temp);
cvSmooth( temp, imgFiltroMediana, CV_MEDIAN, 7, 7, 0, 0);
cvSaveImage("Lenna_Söderberg_Mediana_7x7.jpg",imgFiltroMediana, 0);
cvNamedWindow("Original",CV_WINDOW_AUTOSIZE);
cvShowImage( "Original", temp);
cvNamedWindow("Filtro de Mediana",CV_WINDOW_AUTOSIZE);
cvShowImage( "Filtro de Mediana", imgFiltroMediana);
cvWaitKey(0);
cvDestroyWindow("Original");
cvDestroyWindow("Filtro de Mediana");
cvReleaseImage(&temp);
cvReleaseImage(&imgFiltroMediana);
return 0;
}



No próximo post, demonstraremos a aplicação de um Filtro Gaussiano.


Até breve.