图像处理分析-FFT.docx_第1页
图像处理分析-FFT.docx_第2页
图像处理分析-FFT.docx_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验名称实验 5:频域滤波实验目的掌握图像进行频域滤波的方法和步骤。 1、掌握图像频域 DFT 变换和反变换的方法。 2、掌握图像频域滤波的步骤 实验内容1、灰度图像的 DFT 和 IDFT。 具体内容:利用 OpenCV 提供的 cvDFT 函数对图像进行 DFT 和 IDFT 变换 2、利用理想高通和低通滤波器对灰度图像进行频域滤波 具体内容:利用 cvDFT 函数实现 DFT,在频域上利用理想高通和低通滤波器进行滤波,并把滤波过后的图像显示在屏幕上(观察振铃现象),要求截止频率可输入。 3、利用布特沃斯高通和低通滤波器对灰度图像进行频域滤波。 具体内容:利用 cvDFT 函数实现 DFT,在频域上进行利用布特沃斯高通和低通滤波器进行滤波,并把滤波过后的图像显示在屏幕上(观察振铃现象),要求截止频率和 n 可输入。 实验完成情况1、 实验步骤:利用 OpenCV 提供的 cvDFT 函数对图像进行 DFT 和 IDFT 变换 核心代码如下:/DFT变换IplImage *DFT(IplImage * src)IplImage* fourier = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,2);int dft_H, dft_W; dft_H = src-height; dft_W = src-width;CvMat *src_Re = cvCreateMat(dft_H,dft_W, CV_64FC1);/ double Re, Im; CvMat *src_Im = cvCreateMat(dft_H,dft_W, CV_64FC1);/Imaginary part CvMat *sum_src =cvCreateMat(dft_H,dft_W, CV_64FC2);/2 channels (src_Re, src_Im) CvMat *sum_dst =cvCreateMat(dft_H,dft_W, CV_64FC2);/2 channels (dst_Re, dst_Im)cvConvert(src, src_Re);cvZero(src_Im);cvMerge(src_Re, src_Im, 0, 0, sum_src);cvDFT(sum_src,sum_dst,CV_DXT_FORWARD,0);cvConvert(sum_dst, fourier);cvReleaseMat(&src_Re);cvReleaseMat(&src_Im);cvReleaseMat(&sum_src);cvReleaseMat(&sum_dst);return fourier;/DFT反变换IplImage *IDFT(IplImage * fourier)IplImage* dst = cvCreateImage(cvGetSize(fourier),IPL_DEPTH_8U,1);int dft_H, dft_W; dft_H = fourier-height; dft_W = fourier-width;CvMat *dst_Re = cvCreateMat(dft_H,dft_W, CV_64FC1);/ double Re, Im; CvMat *dst_Im = cvCreateMat(dft_H,dft_W, CV_64FC1);/Imaginary part CvMat *sum_dst =cvCreateMat(dft_H,dft_W, CV_64FC2);/2 channels (dst_Re, dst_Im)CvMat *sum_src = cvCreateMat(dft_H,dft_W, CV_64FC2 ); cvConvert(fourier, sum_src);cvDFT(sum_src,sum_dst,CV_DXT_INV_SCALE,0);cvSplit(sum_dst,dst_Re,dst_Im,0,0);cvConvert(dst_Re, dst);cvReleaseMat(&dst_Re);cvReleaseMat(&dst_Im);cvReleaseMat(&sum_src);cvReleaseMat(&sum_dst);return dst;/归一化,将灰度映射到0255之间, 并将能量最高的四角移到中心, 生成图片频域能量图void BuildDFTImage(IplImage *fourier, IplImage *dst) IplImage *image_Re = 0, *image_Im = 0;image_Re = cvCreateImage(cvGetSize(fourier), IPL_DEPTH_64F, 1);image_Im = cvCreateImage(cvGetSize(fourier), IPL_DEPTH_64F, 1);/Imaginary partcvSplit(fourier, image_Re, image_Im, 0, 0 );/ Compute the magnitude of the spectrum Mag = sqrt(Re2 + Im2)cvPow( image_Re, image_Re, 2.0);cvPow( image_Im, image_Im, 2.0);cvAdd( image_Re, image_Im, image_Re);cvPow( image_Re, image_Re, 0.5 );cvReleaseImage(&image_Im);cvAddS(image_Re, cvScalar(1.0), image_Re); / 1 + MagcvLog(image_Re, image_Re ); / log(1 + Mag)/重新安排傅里叶图像中心/ Rearrange the quadrants of Fourier image so that the origin is at/ the image centerdouble minVal = 0, maxVal = 0;cvMinMaxLoc( image_Re, &minVal, &maxVal );/ Localize minimum and maximum valuesCvScalar min;min.val0 = minVal; double scale = 255 / (maxVal - minVal);cvSubS(image_Re, min, image_Re);cvConvertScale(image_Re, dst, scale);cvReleaseImage(&image_Re);/ Rearrange the quadrants of Fourier image so that the origin is at/ the image centerint nRow, nCol, i, j, cy, cx;uchar tmp13, tmp24;nRow = fourier-height;nCol = fourier-width;cy = nRow/2; / image centercx = nCol/2;for( j = 0; j cy; j+ )for( i = 0; i width;height = fourier-height;long x, y;x = width / 2;y = height / 2;CvMat* H_mat;H_mat = cvCreateMat(fourier-height,fourier-width, CV_64FC2);for(i = 0; i height; i+)for(j = 0; j y & j x)state = 3;else if(i y)state = 1;else if(j x)state = 2;elsestate = 0; switch(state)case 0:tempD = (double)sqrt(1.0*i * i + j * j);break;case 1:tempD = (double)sqrt(1.0*(height - i) * (height - i) + j * j);break;case 2:tempD = (double)sqrt(1.0*i * i + (width - j) * (width - j);break;case 3:tempD = (double)sqrt(1.0*(height - i) * (height - i) + (width - j) * (width - j);break;default:break;switch(FLAG)case IDEAL_LOW:if(tempD data.ptr + H_mat-step * i)j * 2 = 1.0; (double*)(H_mat-data.ptr + H_mat-step * i)j * 2 + 1 = 0.0;else(double*)(H_mat-data.ptr + H_mat-step * i)j * 2 = 0.0; (double*)(H_mat-data.ptr + H_mat-step * i)j * 2 + 1 = 0.0;break;case IDEAL_HIGH:if(tempD data.ptr + H_mat-step * i)j * 2 = 0.0; (double*)(H_mat-data.ptr + H_mat-step * i)j * 2 + 1 = 0.0;else(double*)(H_mat-data.ptr + H_mat-step * i)j * 2 = 1.0; (double*)(H_mat-data.ptr + H_mat-step * i)j * 2 + 1 = 0.0;break;case BW_LOW:tempD = 1 / (1 + pow(tempD / D0, 2 * n);(double*)(H_mat-data.ptr + H_mat-step * i)j * 2 = tempD;(double*)(H_mat-data.ptr + H_mat-step * i)j * 2 + 1 = 0.0;break;case BW_HIGH:tempD = 1 / (1 + pow(D0 / tempD, 2 * n);(double*)(H_mat-data.ptr + H_mat-step * i)j * 2 = tempD;(double*)(H_mat-data.ptr + H_mat-step * i)j * 2 + 1 = 0.0;break;default:break; cvMulSpectrums(fourier, H_mat, fourier, CV_DXT_ROWS);cvReleaseMat(&H_mat);其中选择IDEAL_LOW与IDEAL_HIGH模式即为该实验的理想低通与高通滤波器实验结果如图: 理想低通滤波器处理过程如下图所示理想高通滤波器处理过程如下图所示3、实验步骤:利用 cvDFT 函数实现 DFT,在频域上进行利用布特沃斯高通和低通滤波器进行滤波,并把滤波过后的图像显示在屏幕上(观察振铃现象),并且截止

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论