cv::Mat ideal_high_pass_filter(Mat&src, float sigma)//mat是用来储存图像信息的内存对象 { Mat padded = image_make_border(src);//输入图像进行边缘填充 Mat ideal_kernel = ideal_high_kernel(padded, sigma);//sigma:控制滤波器的截至频率,给定生成理想高通滤波器的核 Mat result = frequency_filter(padded, ideal_kernel);//使用生成的滤波器对填充后的图像进行频域滤波操作 return result;//返回滤波后的结果图像 } Mat butterworth_high_kernel(Mat& scr, float sigma, int n) { Mat butterworth_low_pass(scr.size(), CV_32FC1); //,CV_32FC1 double D0 = sigma;//半径D0越小,模糊越大;半径D0越大,模糊越小 为巴特沃斯低通滤波器截至频率 for (int i = 0; i < scr.rows; i++) {//一行x for (int j = 0; j < scr.cols; j++) {//一列y double d = sqrt(pow((i - scr.rows / 2), 2) + pow((j - scr.cols / 2), 2));//分子,计算pow必须为float型 butterworth_low_pass.at<float>(i, j) = 1.0 / (1 + pow(D0 / d, 2 * n));//butterworth低通滤波器产生公式H(u,v)=1/(1+(D(u,v)/D0)^2n)n为阶数,D0为截止频率 } }
时间: 2024-04-13 20:26:29 浏览: 117
Matlab实现图像低通滤波
4星 · 用户满意度95%
这段代码是关于图像滤波的内容。它包括两个函数,一个用来生成理想高通滤波器的核,另一个用来生成巴特沃斯高通滤波器的核。
首先,`ideal_high_pass_filter`函数接受一个图像`src`和一个控制截至频率的参数`sigma`。它通过对输入图像进行边缘填充来创建一个填充后的图像`padded`,然后使用`ideal_high_kernel`函数生成理想高通滤波器的核`ideal_kernel`,最后使用`frequency_filter`函数对填充后的图像进行频域滤波操作,得到滤波后的结果图像`result`。
接下来,`butterworth_high_kernel`函数接受一个图像`scr`、一个控制截至频率的参数`sigma`和一个阶数参数`n`。它首先创建一个与输入图像大小相同的单通道浮点型图像`butterworth_low_pass`,然后使用巴特沃斯低通滤波器的公式计算每个像素点处的滤波器响应值,并将其存储在`butterworth_low_pass`中。
这段代码实现了对图像进行理想高通滤波和巴特沃斯高通滤波的功能。
阅读全文