opencv 频率域滤波实例
来源:互联网 发布:新能源就业前景 知乎 编辑:程序博客网 时间:2024/06/01 09:40
先上参考链接:http://blog.csdn.net/qq_19764963/article/details/51209970
http://www.cnblogs.com/TonyHome/p/4010116.html
这里给出高斯滤波器的实例,关于傅立叶变换的详细步骤,可以看上一篇博客,这里不做过多介绍了
#include<opencv2/opencv.hpp>#include<iostream>using namespace std;using namespace cv;int main(int a,char**p){Mat input=imread(p[1],CV_LOAD_IMAGE_GRAYSCALE); //这是在ubuntu上运行的,p[1]为控制台给出的参数,即图片路径 //如果不知道怎么传入参数,可以直接改为 //Mat input=imread("image.jpg",CV_LOAD_IMAGE_GRAYSCALE); //image.jpg必须放在当前目录下,image.jpg即为输入图片 imshow("input",input);int w=getOptimalDFTSize(input.cols);int h=getOptimalDFTSize(input.rows);Mat padded;copyMakeBorder(input,padded,0,h-input.rows,0,w-input.cols,BORDER_CONSTANT,Scalar::all(0));padded.convertTo(padded,CV_32FC1);imshow("padded",padded);for(int i=0;i<padded.rows;i++)//中心化操作,其余操作和上一篇博客的介绍一样{float *ptr=padded.ptr<float>(i);for(int j=0;j<padded.cols;j++)ptr[j]*=pow(-1,i+j);}Mat plane[]={padded,Mat::zeros(padded.size(),CV_32F)};Mat complexImg;merge(plane,2,complexImg);dft(complexImg,complexImg);//************************gaussian****************************Mat gaussianBlur(padded.size(),CV_32FC2);Mat gaussianSharpen(padded.size(),CV_32FC2);float D0=2*10*10;for(int i=0;i<padded.rows;i++){float*p=gaussianBlur.ptr<float>(i);float*q=gaussianSharpen.ptr<float>(i);for(int j=0;j<padded.cols;j++){float d=pow(i-padded.rows/2,2)+pow(j-padded.cols/2,2);p[2*j]=expf(-d/D0);p[2*j+1]=expf(-d/D0);q[2*j]=1-expf(-d/D0);q[2*j+1]=1-expf(-d/D0);}}multiply(complexImg,gaussianBlur,gaussianBlur);//矩阵元素对应相乘法,注意,和矩阵相乘区分multiply(complexImg,gaussianSharpen,gaussianSharpen);//*****************************************************************split(complexImg,plane);magnitude(plane[0],plane[1],plane[0]);plane[0]+=Scalar::all(1);log(plane[0],plane[0]);normalize(plane[0],plane[0],1,0,CV_MINMAX);imshow("dft",plane[0]);//******************************************************************split(gaussianBlur,plane);magnitude(plane[0],plane[1],plane[0]);plane[0]+=Scalar::all(1);log(plane[0],plane[0]);normalize(plane[0],plane[0],1,0,CV_MINMAX);imshow("gaussianBlur",plane[0]);split(gaussianSharpen,plane);magnitude(plane[0],plane[1],plane[0]);plane[0]+=Scalar::all(1);log(plane[0],plane[0]);normalize(plane[0],plane[0],1,0,CV_MINMAX);imshow("gaussianSharpen",plane[0]);//******************************************************************//*************************idft*************************************idft(gaussianBlur,gaussianBlur);idft(gaussianSharpen,gaussianSharpen);split(gaussianBlur,plane);magnitude(plane[0],plane[1],plane[0]);normalize(plane[0],plane[0],1,0,CV_MINMAX);imshow("idft-gaussianBlur",plane[0]);split(gaussianSharpen,plane);magnitude(plane[0],plane[1],plane[0]);normalize(plane[0],plane[0],1,0,CV_MINMAX);imshow("idft-gaussianSharpen",plane[0]);waitKey();return 0;}
运行结果如图所示
阅读全文
1 1
- opencv 频率域滤波实例
- 频率域滤波
- OpenCV线性滤波实例
- Matlab Chap3 频率域滤波
- 数字图像处理-频率域滤波原理
- 图像处理(3)频率域滤波
- DIP 例4.15 空间域滤波得到频率域滤波
- 数字图像的空间域滤波和频率域滤波
- 频率滤波(2)
- 频率域低通滤波
- 图像 快速傅里叶变换 及 频率域滤波 java 实现
- 有关于图像频率域和滤波的总结
- 《数字图像处理》第三版笔记(六)频率域滤波
- OPENCV 滤波
- opencv滤波
- opencv 滤波
- OpenCV | 滤波
- opencv滤波
- 将请求转换为json请求
- Blackhat 2017&Defcon 25学习笔记
- 在java中关于使用scanner接受char类型字符的方法
- C# WPD PortableDeviceApiLib获取便携设备列表
- BZOJ 1050: [HAOI2006]旅行comf
- opencv 频率域滤波实例
- DataBinding事件绑定【二】
- poj -3684 小球弹性碰撞
- (转)python图像操作
- 动态规划之硬币表示问题
- HDU 6034 Balala Power!(多校1)
- Centos 7.3安装Zabbix3.2
- C# WPD (windows portable devices) 检测WPD设备 获取设备信息
- Ubuntu C++ 环境的搭建