智能图像处理:Python和OpenCV实现第六章 图像频域滤波.pptx

智能图像处理:Python和OpenCV实现第六章 图像频域滤波.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章图像频域滤波;频域滤波;;6.1;傅里叶变换;6.1.1 Numpy中的傅里叶变换; 在Numpy库中有FFT(快速傅里叶变换)函数来实现傅立叶变换。二维的傅里叶变换函数语法格式为: np.fft.fft2(src, n=None, axis=-1, norm=None) 其中第一个参数是输入图像,即灰度图像。第二个参数是可选的,它决定输出数组的大小。如果它大于输入图像的尺寸,则在计算FFT之前用零填充输入图像。如果小于输入图像,将裁切输入图像。如果未传递任何参数,则输出数组的大小将与输入的大小相同。其余参数选择默认值即可。;例6.1 利用python的numpy库实现图像傅里叶变换及反变换。;6.1.2 OpenCV中的傅里叶变换;表6-1 flags标识符列表;例6.2 利用OpenCV提供了函数cv2.dft()和函数cv2.idft实现傅里叶变换和逆变换。;6.2;低通滤波;6.2.1 理想低通滤波器;例6.3 对一幅图像进行不同范围频域的理想低通滤波,观察效果。;程序运行结果如图所示。从结果看,图中左边为原图像,中间图像为在傅里叶变换频域上截取40ⅹ40正方形的低通区域,逆变换后的得到的图像,可以看出图像变得模糊、丢失了许多细节、有振铃现象,这也是理想低通滤波的特点。右边图像为在傅里叶变换频域上截取100ⅹ100正方形的低通区域,逆变换后的得到的图像,这时图像看起来与原图像基本差不多了,这也是对图像进行有损压缩的原理。;6.2.2 巴特沃斯低通滤波(Butterworth filter);例6.4 对一幅图像进行巴特沃斯低通滤波,观察结果。;def BWfilter(rows, cols, d0, n): #巴特沃斯低通滤波 duv = fft_distances(*fft_mat.shape[:2]) filter_mat = 1 / (1 + np.power(duv / d0, 2 * n)) filter_mat = cv2.merge((filter_mat, filter_mat)) return filter_mat def do_filter(_=None): d0 = cv2.getTrackbarPos(D0, filter_win) n = cv2.getTrackbarPos(n, filter_win) filter_mat = BWfilter(fft_mat.shape[0], fft_mat.shape[1], d0, n) filtered_mat = filter_mat * fft_mat img_back = ifft(filtered_mat) cv2.imshow(image_win, combine_images([img_back, fft_image(filter_mat)])) ;当D0=30、n=2时程序运行结果如图6-4所示。可以通过调整滤波器参数D0和n,看到滤波器参数D0和n的变换对图像滤波的影响效果。当滤波半径D0越大,滤波效果越好,图像越清晰;当滤波器阶数越???,图像变得越模糊。因为巴特沃斯低通滤波器在高、低频间的过渡平滑,因此没有出现明显的振铃效应。;6.3 高斯低通滤波(Gaussian Low Pass Filter);例6.5 对一幅图像进行高斯低通滤波,观察结果。;def glpfilter(rows, cols, d0, n): #高斯低通滤波 duv = fft_distances(*fft_mat.shape[:2]) filter_mat = np.exp(-(duv * duv) / (2 * d0 * d0)) filter_mat = cv2.merge((filter_mat, filter_mat)) return filter_mat def do_filter(_=None): d0 = cv2.getTrackbarPos(D0, filter_win) n = cv2.getTrackbarPos(n, filter_win) filter_mat = glpfilter(fft_mat.shape[0], fft_mat.shape[1], d0, n) filtered_mat = filter_mat * fft_mat img_back = ifft(filtered_mat) cv2.imshow(image_win, combine_images([img_back, fft_image(filter_mat)]));当D0=30、n

文档评论(0)

lai + 关注
实名认证
内容提供者

精品资料

版权声明书
用户编号:7040145050000060

1亿VIP精品文档

相关文档