ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:385.72KB ,
资源ID:12318416      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12318416.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(图像处理分析FFT.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

图像处理分析FFT.docx

1、图像处理分析FFT实验名称实验5:频域滤波实验目的掌握图像进行频域滤波的方法和步骤。1、掌握图像频域 DFT 变换和反变换的方法。2、掌握图像频域滤波的步骤实验内容1、灰度图像的 DFT 和 IDFT。具体内容:利用 OpenCV 提供的 cvDFT 函数对图像进行 DFT 和 IDFT 变换2、利用理想高通和低通滤波器对灰度图像进行频域滤波具体内容:利用 cvDFT 函数实现 DFT,在频域上利用理想高通和低通滤波器进行滤波,并把滤波过后的图像显示在屏幕上(观察振铃现象),要求截止频率可输入。3、利用布特沃斯高通和低通滤波器对灰度图像进行频域滤波。具体内容:利用 cvDFT 函数实现 DFT

2、,在频域上进行利用布特沃斯高通和低通滤波器进行滤波,并把滤波过后的图像显示在屏幕上(观察振铃现象),要求截止频率和 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

3、= 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,

4、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

5、= 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_64

6、FC2); /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); cvRelease

7、Mat(&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

8、part cvSplit(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, cvScal

9、ar(1.0), image_Re); / 1 + Mag cvLog(image_Re, image_Re ); / log(1 + Mag) /重新安排傅里叶图像中心 / Rearrange the quadrants of Fourier image so that the origin is at / the image center double minVal = 0, maxVal = 0; cvMinMaxLoc( image_Re, &minVal, &maxVal ); / Localize minimum and maximum values CvScalar min; m

10、in.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 center int nRow, nCol, i, j, cy, cx; uchar tmp13, tmp24; nRow =

11、fourier-height; nCol = fourier-width; cy = nRow/2; / image center cx = 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;

12、 j y & j x) state = 3; else if(i y) state = 1; else if(j x) state = 2; else state = 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);

13、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 *

14、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-st

15、ep * 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

16、 * 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,在频域上进行利用布特沃斯高通和低通滤波器进行滤波,并把滤波过后的图像显示在屏幕上(观察振铃现象),并且截止频率和 n 可输入。核心代码与2中类似其中选择BW_LOW与BW_HIGH模式即为该实验的理想低通与高通滤波器实验结果如图:巴特沃斯低通滤波器处理过程如下图所示巴特沃斯高通滤波器处理过程如下图所示实验中的问题问题:DFT变换后图像全为黑色。解决方法:DFT处理后未调整图像中心,高能量集中在图片的四个拐角,重新设计算法中心化该谱,将能量集中到图像中心。实验结果实验源码位于实验5_曹欣_SA14225013.rar中代码位于lab5文件夹中,5_1.cpp为主程序,可在宏定义中修改截止频率D0

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1