首先看个图了解下什么是理想低通滤波器公式和图是转自Rolin的专栏

低通滤波器

1.理想的低通滤波器

其中,D0表示通带的半径。D(u,v)的计算方式也就是两点间的距离,很简单就能得到。

使用低通滤波器所得到的结果如下所示。低通滤波器滤除了高频成分,所以使得图像模糊。由于理想低通滤波器的过度特性过于急峻,所以会产生了振铃现象。

2.巴特沃斯低通滤波器

同样的,D0表示通带的半径,n表示的是巴特沃斯滤波器的次数。随着次数的增加,振铃现象会越来越明显。

void ideal_Low_Pass_Filter(Mat src){Mat img;cvtColor(src, img, CV_BGR2GRAY);imshow("img",img);//调整图像加速傅里叶变换int M = getOptimalDFTSize(img.rows);int N = getOptimalDFTSize(img.cols);Mat padded;copyMakeBorder(img, padded, 0, M - img.rows, 0, N - img.cols, BORDER_CONSTANT, Scalar::all(0));//记录傅里叶变换的实部和虚部Mat planes[] = { Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F) };Mat complexImg;merge(planes, 2, complexImg);//进行傅里叶变换dft(complexImg, complexImg);//获取图像Mat mag = complexImg;mag = mag(Rect(0, 0, mag.cols & -2, mag.rows & -2));//这里为什么&上-2具体查看opencv文档//其实是为了把行和列变成偶数 -2的二进制是11111111.......10 最后一位是0//获取中心点坐标int cx = mag.cols / 2;int cy = mag.rows / 2;//调整频域Mat tmp;Mat q0(mag, Rect(0, 0, cx, cy));Mat q1(mag, Rect(cx, 0, cx, cy));Mat q2(mag, Rect(0, cy, cx, cy));Mat q3(mag, Rect(cx, cy, cx, cy));q0.copyTo(tmp);q3.copyTo(q0);tmp.copyTo(q3);q1.copyTo(tmp);q2.copyTo(q1);tmp.copyTo(q2);//Do为自己设定的阀值具体看公式double D0 = 60;//处理按公式保留中心部分for (int y = 0; y < mag.rows; y++){double* data = mag.ptr<double>(y);for (int x = 0; x < mag.cols; x++){double d = sqrt(pow((y - cy),2) + pow((x - cx),2));if (d <= D0){}else{data[x] = 0;}}}//再调整频域q0.copyTo(tmp);q3.copyTo(q0);tmp.copyTo(q3);q1.copyTo(tmp);q2.copyTo(q1);tmp.copyTo(q2);//逆变换Mat invDFT, invDFTcvt;idft(mag, invDFT, DFT_SCALE | DFT_REAL_OUTPUT); // Applying IDFTinvDFT.convertTo(invDFTcvt, CV_8U);imshow("理想低通滤波器", invDFTcvt);
}void Butterworth_Low_Paass_Filter(Mat src){int n = 1;//表示巴特沃斯滤波器的次数//H = 1 / (1+(D/D0)^2n)Mat img;cvtColor(src, img, CV_BGR2GRAY);imshow("img", img);//调整图像加速傅里叶变换int M = getOptimalDFTSize(img.rows);int N = getOptimalDFTSize(img.cols);Mat padded;copyMakeBorder(img, padded, 0, M - img.rows, 0, N - img.cols, BORDER_CONSTANT, Scalar::all(0));Mat planes[] = { Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F) };Mat complexImg;merge(planes, 2, complexImg);dft(complexImg, complexImg);Mat mag = complexImg;mag = mag(Rect(0, 0, mag.cols & -2, mag.rows & -2));int cx = mag.cols / 2;int cy = mag.rows / 2;Mat tmp;Mat q0(mag, Rect(0, 0, cx, cy));Mat q1(mag, Rect(cx, 0, cx, cy));Mat q2(mag, Rect(0, cy, cx, cy));Mat q3(mag, Rect(cx, cy, cx, cy));q0.copyTo(tmp);q3.copyTo(q0);tmp.copyTo(q3);q1.copyTo(tmp);q2.copyTo(q1);tmp.copyTo(q2);double D0 = 100;for (int y = 0; y < mag.rows; y++){double* data = mag.ptr<double>(y);for (int x = 0; x < mag.cols; x++){//cout << data[x] << endl;double d = sqrt(pow((y - cy), 2) + pow((x - cx), 2));//cout << d << endl;double h = 1.0 / (1 + pow(d / D0, 2 * n));if (h <= 0.5){data[x] = 0;}else{//data[x] = data[x]*0.5;//cout << h << endl;}//cout << data[x] << endl;}}q0.copyTo(tmp);q3.copyTo(q0);tmp.copyTo(q3);q1.copyTo(tmp);q2.copyTo(q1);tmp.copyTo(q2);//逆变换Mat invDFT, invDFTcvt;idft(complexImg, invDFT, DFT_SCALE | DFT_REAL_OUTPUT); // Applying IDFTinvDFT.convertTo(invDFTcvt, CV_8U);imshow("巴特沃斯低通滤波器", invDFTcvt);
}






												

基于opencv的理想低通滤波器和巴特沃斯低通滤波器相关推荐

  1. 5.6.2 低通滤波器(理想低通+巴特沃斯低通滤波器)

    1.低通滤波器 低通滤波是将频域图像中的高频部分滤除而通过低频部分.图像的边缘和噪声对应于频域图像中的高频部分,而低通滤波的作用即是减弱这部分的能量,从而达到图像平滑去噪的目的. 2.理想低通滤波器 ...

  2. 理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器

    低通滤波器 1.理想的低通滤波器 其中,D0表示通带的半径.D(u,v)的计算方式也就是两点间的距离,很简单就能得到. 使用低通滤波器所得到的结果如下所示.低通滤波器滤除了高频成分,所以使得图像模糊. ...

  3. 通过matlab编程,对以下图像分别添加高斯噪声和椒盐噪声(参数自定),并使用理想低通滤波器、高斯低通滤波器和巴特沃斯低通滤波器进行去噪。

    添加高斯噪声和椒盐噪声,并用理想低通滤波器进行去噪 t=imread('C:\Users\Administrator\Desktop\123.jpg'); subplot(3,2,1) imshow( ...

  4. 第4章 Python 数字图像处理(DIP) - 频率域滤波10 - 使用低通频率域滤波器平滑图像 - 理想、高斯、巴特沃斯低通滤波器

    目录 使用低通频率域滤波器平滑图像 理想低通滤波器(ILPF) 高斯低通滤波器(GLPF) 巴特沃斯低通滤波器 低通滤波的例子 使用低通频率域滤波器平滑图像 理想低通滤波器(ILPF) 在以原点为中心 ...

  5. 【OpenCV 例程200篇】82. 频率域巴特沃斯低通滤波器

    [OpenCV 例程200篇]82. 频率域巴特沃斯低通滤波器 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 3.4 ...

  6. 巴特沃斯低通滤波器归一化matlab,基于MATLAB设计巴特沃斯低通滤波器

    <基于MATLAB设计巴特沃斯低通滤波器>由会员分享,可在线阅读,更多相关<基于MATLAB设计巴特沃斯低通滤波器(6页珍藏版)>请在人人文库网上搜索. 1.基于MATLAB设 ...

  7. 图像处理之理想高通滤波器、巴特沃斯高通滤波器和高斯高通滤波器的matlab简单实现

    一.前言 高通滤波器的功能是让高频率通过而滤掉或衰减低频,其作用是使图像得到锐化处理,突出图像的边界.经理想高频滤波后的图像把信息丰富的低频去掉了,丢失了许多必要的信息**.一般情况下,高通滤波对噪声 ...

  8. MATLAB:巴特沃斯低通滤波器过滤信号

    MATLAB:巴特沃斯低通滤波器过滤信号 实验内容产生两个不同频率的正弦信号,设计合适的滤波器,输出其中的一个信号,滤除另外的一个信号. 代码: %生成两个不同频率的信号 clc; T=2;%时域长度 ...

  9. 用matlab做巴特沃斯低通滤波器

    用matlab做巴特沃斯低通滤波器 趁着暑假,做一个心电图的matlab实验,遇到了滤波器问题,网上代码比较杂乱,做了一个汇总整理. 主要做了一个简单的低通滤波器并以三角函数为例子进行低通滤波. 基本 ...

最新文章

  1. c语言生成随机坐标,C语言 文件的随机读写详解及示例代码
  2. SAP 使用ST05跟踪方法
  3. 数据库MySQL--基础查询
  4. 2017.9.25 Xor 失败总结
  5. Python爬虫爬取电影网站种子,让你以后再也不寂寞
  6. 土壤修复废水除镍技术,除镍树脂材料
  7. 如何从 Hibernate官网下载 hibernate原码 和hibernatetools
  8. Intel CPU发展简史
  9. 注册页面获取手机验证码
  10. 下行期的资本,正在追逐「猫品牌」
  11. 只要心存美好便是岁月花开时
  12. php+ajax实现分页
  13. 【图形学】18 光照模型(三、镜面反射的Shader实现)
  14. office365服务器没有响应,修复:由于长时间运行的脚本,Office 365没有响应
  15. 图文详解 DFS 算法 和 BFS 算法
  16. SQL DATENAME(month,getdate())返回的数据为英文日期及把日期转为字符去比较的性能问题
  17. ddd linux 调试工具_Centos安装DDD调试器
  18. 化合物半导体晶格常数汇总
  19. jquery图表插件--jqPlot实现柱状图
  20. SQL基本使用(通俗易懂,适合适合0基础的小伙伴们)

热门文章

  1. C51学习笔记(一)
  2. JAVA基础编程代码50个
  3. 【机试题】2014大疆嵌入式笔试题(附超详细解答,下篇)
  4. 在北京西单图书大厦签名售书
  5. 称重传感器的构造与测重形式
  6. python 如何爬取王者荣耀全英雄皮肤
  7. 项目1在线交流平台-4. 使用radis高性能储存方案-5.redis常用使用场景-开发关注功能-redis事务
  8. Oracle Data Guard的三种保护模式
  9. ie httpwatch抓包
  10. 3D点云处理:点云聚类--FEC: Fast Euclidean Clustering for Point Cloud Segmentation