图像处理 | 空间域与频率域滤波

频率域滤波(低通)

作用:平滑处理图像,通过低频拒绝高频,同时高频往往是图像噪声所集中的地方。

1) 算法思路流程

频率域滤波的一般处理方法是:先修改一幅图像的傅里叶变换,然后计算其反变换,得到处理后的结果。
高斯低通滤波函数已经给出,同时参数D0已知,我们只需求出频率中的每一个点与频率矩形中心的距离D并代入公式即可。
具体实现步骤如下:

  1. 生成原图像两倍大小(P=2r,Q=2c)的全零数组,并用原图像对其进行填充;
  2. 将1) 中所得结果乘以(-1)^(x+y),作中心变换;
  3. 通过fft2()函数计算中心变换后原图像的傅里叶变换;
  4. 遍历傅里叶变换后所得矩阵中的每一个元素,计算出其与频率域矩形中心(P/2,Q/2)的距离D,再将D0与D代入高斯低通滤波公式;
  5. 对4)中得到结果进行傅里叶反变换,取出实部,并将每一个像素点乘以(-1)^(x+y);
  6. 从矩阵的左上角提取出原图像大小的区域,赋值给输出图像img2。

2) 函数接口实现

function img2 = myGussianLowPassFilter(img1, D0)
% 图像的频率域高斯低通滤波处理函数
% img1为输入图像,D0为距频率矩形中心的距离(即截止频率)% img2为滤波后的图像

img1_double = double(img1);
[r c] = size(img1_double);
% 填充参数P和Q
P = 2*r;
Q = 2*c;
% 生成 P*Q 的全0数组然后进行填充
img1_fill = zeros(P,Q);
img1_fill(1:P/2,1:Q/2) = img1_double;
for i = 1:P/2
    for j = 1:Q/2
        % 中心变换
        img1_fill(i,j) = img1_fill(i,j)*(-1)^(i+j);
    end
end
% 计算输入图像的傅里叶变换
img1_fill_dft = fft2(img1_fill);
img2 = zeros(P,Q);
for i = 1:P
    for j = 1:Q
        % D为频率域中的一点(i,j)与频率矩形中心的距离
        D = sqrt( (i-(P/2))^2+(j-(Q/2))^2 );
        factor = -1 * ( D^2/(2*D0^2) );
        H = exp(factor);
        % 将F与H进行乘积运算
        img2(i,j) = img1_fill_dft(i,j) * H;
    end
end
% 执行反傅里叶变换并取出实部
img2_idft = ifft2(img2);
img2_idft = real(img2_idft);
for i = 1:P
    for j = 1:Q
        % 将结果乘以(-1)^(x+y)进行还原
        img2_idft(i,j) = img2_idft(i,j)*(-1)^(i+j);
    end
end
% 提取出左上角的r*c区域
g = img2_idft(1:r,1:c);
img2 = g;
img2 = uint8(img2);
end

3) 处理结果

在这里插入图片描述

空间域滤波(拉普拉斯算子)

作用:锐化图像,突出灰度的过渡部分,增强图像灰度突变的对比度

1) 算法思路流程

给定拉普拉斯算子所构造的滤波器模板,对图像进行边界填充(补0),用滤波器系数与邻域内的像素进行累加求和,赋值给图像的对应位置(提取区域的中心坐标)的元素,最后再用原图像减去经过拉普拉斯变换计算后的图像即可(根据滤波器中心系数决定是用原图像加上拉普拉斯变换后的图像还是减去它,系数为正则加,系数为负则减)。
具体实现步骤:

  1. 假设滤波器模板尺寸为m*n,则补边后的总边数变为r+m-1以及c+n-1;
  2. 生成补边后的全零数组,然后用原图像对其原位置的像素进行填充;
  3. 双重for循环遍历数组中的元素,提取出与滤波器模板等大的区域,计算出提取区域的中心坐标(假设为x,y),定义题目所给出的滤波器模板数组w,将提取出的图像区域中的点与滤波器系数对应相乘累加求和,最后赋值给输出图像对应位置的元素img2(x,y)。
  4. 将3)中的处理结果赋值给拉普拉斯变换后的图像矩阵;
  5. 用原图像 - 拉普拉斯变换后的图像得出空间锐化处理后的图像img2。

2) 函数接口实现

function img2 = mySpatialLaplaceFilter(img1)
% 空间域锐化滤波函数,采用拉普拉斯算子作为滤波器模板
% img1为输入图像;img2为滤波处理后的输出图像

img1_double = double(img1);
[r c] = size(img1_double);
% 定义 3*3 滤波器模板
m = 3;
n = 3;
% 补边后的总边数
row_fill = r + m - 1;
col_fill = c + n - 1;
%0 填充边界
img2 = zeros(row_fill, col_fill);
img2(1+(m-1)/2:row_fill-(m-1)/2,1+(n-1)/2:col_fill-(n-1)/2) = img1_double;
img2_copy = img2;
for i = 1 : r
    for j = 1 : c
        % 提取与滤波器模板等大的区域
        img_area = img2_copy(i:i+m-1,j:j+n-1);
        w = [1 1 1; 1 -8 1; 1 1 1];
        x_center = i + (m-1)/2;
        y_center = j + (n-1)/2;
        % 计算拉普拉斯变换后的图像
        img2(x_center,y_center) = sum(w(:).*img_area(:));
    end
end
laplace = img2(1+(m-1)/2:row_fill-(m-1)/2,1+(n-1)/2:col_fill-(n-1)/2);
% 用原图像 - 拉普拉斯变换后的图像得出处理后的图像
img2 = img1_double - laplace;
img2 = uint8(img2);
end

3) 处理结果

在这里插入图片描述

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值