用巴特沃斯高通滤波器对一幅图像进行锐化处理,该过程用自然语言描述为下:
(1)将该图像进行适当的扩充。
(2)对扩充后的图像进行二维傅立叶变换。
(3)将傅立叶变换后的频率域下的值乘以巴特沃斯高通滤波器的滤波函数
(4)将两个相乘的值进行傅立叶反变换,即得到锐化的图像。
ButterWorth高通滤波器的系统函数为
实现的代码如下:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void DFT(Mat &src, Mat &dst)
{
Mat padded;
int m = getOptimalDFTSize(src.rows); //获取最佳DFT变换尺寸
int n = getOptimalDFTSize(src.cols);
copyMakeBorder(src, padded, 0, m - src.rows, 0, n - src.cols, BORDER_CONSTANT, Scalar::all(0));
//填充输入图像src,输出矩阵为padded
Mat planes[] = { Mat_<float>(padded),Mat::zeros(padded.size(),CV_32F) };
Mat complexI;
merge(planes, 2, complexI); //将planes融合合并成一个多通道数组complexI
dft(complexI, complexI); //进行傅立叶变换
dst = complexI;