La aplicación toma como entrada una imagen de una radiografía con ruido y mediante una serie de procesamientos, lo que devolvemos como resultado es una radiografía con un efecto de realzado a los huesos y sin mucho ruido para facilitar al radiólogo y al doctor el diagnóstico de las enfermedades de sus pacientes
Pasos de Implementación:
- Cargamos nuestra imagen de Rayos X.
- Eliminamos el ruido.(GAUSSIANO, MEDIANO,etc…)
IplImage* imagensinRuido= img;
IplImage *imgFiltroMediana = cvCloneImage(imagensinRuido);
cvSmooth( imagensinRuido, imgFiltroMediana, CV_MEDIAN, 3, 3, 0, 0);
//GAUSSIANO
IplImage* imagensinRuidoGaussiano= img;
IplImage *imgFiltroGaussiano = cvCloneImage(imagensinRuidoGaussiano);
cvSmooth( imagensinRuidoGaussiano, imgFiltroGaussiano, CV_GAUSSIAN, 7, 7, 0, 0);
- Conversión de Imagen en escala de grises.
- Creamos una copia de la imagen en escala de grises
- Se aplica la función FiltroHomomorfico a la copia creada.
/* Funcion FiltroHomomorfico */
/*************************************************************/
void FiltroHomomorfico(CvMat* dft_Filter, int D, int n, float upper, float lower)
{
CvMat* single = cvCreateMat(dft_Filter->rows, dft_Filter->cols, CV_64FC1 );
CvPoint centre = cvPoint(dft_Filter->rows / 2, dft_Filter->cols / 2);
double radius;
for(int i = 0; i < dft_Filter->rows; i++)
{
for(int j = 0; j < dft_Filter->cols; j++)
{
radius = (double) sqrt(pow((i – centre.x), 2.0) + pow((double) (j – centre.y), 2.0));
CV_MAT_ELEM(*single, double, i, j) =
((upper – lower) * ( 1 / (1 + pow((double) (D / radius), (double) (2 * n))))) + lower;
}
}
cvMerge(single, single, NULL, NULL, dft_Filter);
cvReleaseMat(&single);
}
- Se aplica Ecualizacion de histogramas a la imagen resultante de aplicar la función FiltroHomomorfico.
creamos una barra para ajustar los parámetros
con:
cvCreateTrackbar