Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Color y transformaciones lineales en OpenCV (página 2)




Enviado por Pablo Turmero



Partes: 1, 2

Monografias.com
Es conveniente definirse funciones para empaquetar/ desempaquetar imágenes en este formato. Por ejemplo, de formato RCPack2D a formato Fase/Magnitud.

Transformada Discreta de Fourier:
void cvDFT (const CvArr* src, CvArr* dst,
CV_DXT_FORWARD | CV_DXT_SCALE)
Transformar la imagen src (en el dominio espacial) en la dst (dominio frecuencial).
Usar imágenes de 1 canal y profundidad real, es decir, 32F o 64F. También se puede usar profundidad compleja.
El resultado estará en formato RCPack2D.
La llamada usa el algoritmo O(n·log n) de FFT.
Usar el OR de las dos constantes

Monografias.com
Transformada Discreta Inversa de Fourier:
void cvDFT (const CvArr* src, CvArr* dst, CV_DXT_INVERSE)
Transformar la imagen src (en el dominio frecuencial) en la dst (dominio espacial), es decir, la transformación inversa a la DFT. Aquí no se pone el flag para escalar.
Igual que antes, las imágenes deben ser de 1 canal y profundidad 32F o 64F.

Ejemplo. Dada una imagen img (de 8 bits y 1 canal), la imagen sal resultante del siguiente código será la misma.

IplImage* img32= cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1);
IplImage* fft= cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1);
IplImage* sal= cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
cvScale(img, img32);
cvDFT(img32, fft, CV_DXT_FORWARD | CV_DXT_SCALE);
cvDFT(fft, img32, CV_DXT_INVERSE);
cvScale(img32, sal);

Monografias.com
La transformada del coseno, DCT, no tiene problemas de representación, porque sólo usa números reales.
Transformada Discreta del Coseno:
void cvDCT (const CvArr* src, CvArr* dst, CV_DXT_FORWARD)
Dada la imagen src (en el dominio espacial) obtienen la transformada del coseno en dst.
Igual que con la cvDFT, La función cvDCT es restrictiva en los tipos y profundidades admitidos: imágenes de 1 canal y profundidad real.
Para hallar la magnitud, podemos usar la función cvAbs.
Transformada Discreta Inversa del Coseno:
void cvDCT (const CvArr* src, CvArr* dst, CV_DXT_INVERSE)
Dada la imagen src obtienen la transformada inversa del coseno en dst.

Monografias.com
Ejemplo 1. Dada una imagen img, calcular el espectro (magnitud de la DFT, sin centrar) en la imagen res.
IplImage *img32= cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1);
IplImage *fft= cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1);
IplImage *espectro= cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1);
cvScale(img, img32);
cvDFT(img32, fft, CV_DXT_FORWARD);
ggmComplexToMagnitud(fft, espectro);
IplImage *res= cvCloneImage(img);
cvConvertScale(espectro, res, -1.0/150.0, 255);
cvReleaseImage(&img32); cvReleaseImage(&fft); cvReleaseImage(&espectro);
Donde tenemos definidas las funciones:
void ggmReimToMag (IplImage *ent, int x1, int y1, int x2, int y2,
IplImage *sal, int x, int y, int xc= -1, int yc= -1)
{
CvScalar pf1= cvGet2D(ent, y1, x1);
CvScalar pf2= x2>=0 ? cvGet2D(ent, y2, x2) : cvScalarAll(0);
for (int i= 0; i<3; i++)
pf1.val[i]= sqrt(pf1.val[i]*pf1.val[i]+pf2.val[i]*pf2.val[i]);
cvSet2D(sal, y, x, pf1);
if (xc>=0) cvSet2D(sal, yc, xc, pf1);
}

Monografias.com
void ggmComplexToMagnitud (IplImage *ent, IplImage *sal)
{
int ancho= ent->width, ancho2= (ancho%2 ? ancho-1 : ancho-2);
int alto= ent->height, alto2= (alto%2 ? alto-1 : alto-2);
int x, y;
ggmReimToMag(ent, 0, 0, -1, -1, sal, 0, 0);
for (y= 1; y<3; i++)
suma.val[i]= color.val[i] – media.val[i];
cvAddS(img, suma, img);

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter