Matlab图像处理系列——频率域图像增强之理想低通滤波器、高斯低通滤波器、高斯高通滤波器、拉普拉斯滤波器以及高斯带阻滤波器

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
在这里插入图片描述
本节目录

一、频率滤波
1、频率滤波概念
2、频率滤波步骤
二、理想低通滤波器
1、理想低通滤波器概念
2、理想低通滤波器的Matlab仿真
三、高斯低通滤波器
1、高斯低通滤波器概念
2、高斯低通滤波器的Matlab仿真
四、高斯高通滤波器
1、高斯高通滤波器概念
2、高斯高通滤波器的Matlab仿真
五、拉普拉斯滤波器
1、拉普拉斯滤波器概念
2、拉普拉斯滤波器的Matlab仿真
六、高斯带阻滤波器
1、高斯带阻滤波器概念
2、高斯带阻滤波器的Matlab仿真
七、Matlab仿真源码
1、频域滤波imfreqfilter源码
2、理想低通滤波器ideal_filter源码
3、高斯低通滤波器imgaussflpf源码
4、高斯高通滤波器imgaussfhpf源码
5、拉普拉斯滤波器imlapfilter源码
6、高斯带阻滤波器imgaussfbrf源码
7、周期噪声imtnoise源码
8、理想低通滤波器的Matlab仿真源码
9、高斯低通滤波器的Matlab仿真源码
10、高斯高通滤波器的Matlab仿真源码
11、拉普拉斯滤波器的Matlab仿真源码
12、高斯带阻滤波器的Matlab仿真源码

本节内容
一、频率滤波
1、频率滤波概念

傅里叶变换将图像从空间域变换到频域;傅里叶反变换将图像的频谱逆变换为空间域图像。通过利用空间域图像与频谱之间的对应关系,将空间域卷积滤波变换为频域滤波,再将频率滤波处理后的图像反变换为空间域,从而达到图像增强的目的。
卷积定理:两个二维连续函数在空间域中的卷积,可由其相应的两个傅里叶变换乘积的反变换得到,同时,在频域中的卷积,可由空间域中乘积的傅里叶变换得到。
F(u,v)和H(u,v)分别为f(x,y)和h(x,y)的傅里叶变换,,*表示卷积<=>表示傅里叶变换对,左侧表达式可通过傅里叶正变换得到右侧表达式,右侧表达式可通过傅里叶反变换得到左侧表达式。
f(x,y)*h(x,y)<=>F(u,v)H(u,v)
f(x,y)h(x,y)<=>F(u,v)*H(u,v)
2、频率滤波步骤
①计算原始图像f(x,y)的DTF,得到F(u,v);
②将频谱F(u,v)的零频点移动到频谱图的中心位置;
③计算滤波器函数H(u,v)与F(u,v)的乘积G(u,v);
④将频谱G(u,v)的零频点移动到频谱图的中心位置;
⑤计算上一步中傅里叶反变换g(x,y);
⑥取g(x,y)的实部作为最终滤波的结果图像。
零相移滤波器,滤波过程中只关心实数,H的每个实数元素分别乘以F中对于位置的复数元素,F中元素的实部和虚部等比例的变化,不会改变F的相位谱。
二、理想低通滤波器
1、理想低通滤波器概念

在频谱中,低频主要对应图像在平滑区域的总体灰度级分布,高频对应图像的细节部分,比如噪声和边缘。图像平滑通过衰减图像频谱中的高频部分来实现。
衰减高频成分的方法,在一个称为“截止频率”的位置“截断”所有的高频成分,将图像频谱中所有高于这一截止频率的频谱成分设置为0,低于截止频率的成分保持不变。
理想低通滤波器的表达式:
在这里插入图片描述

M表示图像宽度,N表示图像高度,D0表示理想低通滤波器的截止频率,滤波器的频率域原点在频谱图像的中心处,在以截止频率为半径的圆形区域之内的滤镜元素值全为1,该圆之外的滤镜元素全部为0。
在这里插入图片描述

2、理想低通滤波器的Matlab仿真
自定义滤波器函数imfreqfilter,用于对灰度图像的频率滤波。
自定义理想低通滤波器函数ideal_filter。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、高斯低通滤波器
1、高斯低通滤波器概念

高斯低通滤波器的频率域二维形式:
在这里插入图片描述
在这里插入图片描述

当高斯曲线的标准差σ增大时,H(u)的图像变得更宽,而h(x)的图像变得更窄和更高。也就是频率域滤波器越窄,滤除的高频成分越多,图像就越平滑。在空间域,对应滤波器越宽,响应的卷积模板越平坦,平滑效果也越明显。
频域二维高斯滤镜的曲面便是:
在这里插入图片描述

2、高斯低通滤波器的Matlab仿真
自定义高斯低通滤波器函数imgaussflpf。
在这里插入图片描述
在这里插入图片描述

四、高斯高通滤波器
1、高斯高通滤波器概念

图像锐化可以通过衰减图像频谱中的低频成分来实现,空间域图像锐化与频域高通滤波之间的关系。
高斯高通滤波器,滤波操作滤除低频成分,其表达式及曲线特性:
在这里插入图片描述
在这里插入图片描述

2、高斯高通滤波器的Matlab仿真
自定义高斯高通滤波器函数imgaussfhpf。
在这里插入图片描述
在这里插入图片描述

五、拉普拉斯滤波器
1、拉普拉斯滤波器概念

在这里插入图片描述

2、拉普拉斯滤波器的Matlab仿真
自定义拉普拉斯滤波器函数imlapfilter。
在这里插入图片描述在这里插入图片描述

六、高斯带阻滤波器
1、高斯带阻滤波器概念

在这里插入图片描述

D0是阻塞频带中心频率到频率原点的距离,W是阻塞频带宽度,D是点(u,v)到频率原点的距离。
2、高斯带阻滤波器的Matlab仿真
自定义高斯带阻滤波器函数imgaussfbrf和周期噪声imtnoise。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、Matlab仿真源码
1、频域滤波imfreqfilter源码

function image_out=imfreqfilter(image_in,ff)
%imfreqfilter 对灰度图像进行频域滤波
%image_in 输入的灰度图像
%ff应用的与图像等大的频移滤波
%RGB图像
if(ndims(image_in)==3)&&(size(image_in,3)==3)
    image_in=rgb2gray(image_in);
end

if(size(image_in)~=size(ff))
    msg1=sprintf('%s:滤镜与原图像不等大,检测输入',mfilename);
    msg2=sprintf('%s:滤波操作已经取消',mfilename);
    eid=sprintf('Images:%s:Image Size Not Equal',mfilename);
    error(eid,'%s %s',msg1,msg2);
end

%快速傅里叶变换
f=fft2(image_in);
%移动原点
s=fftshift(f);
%应用滤镜及反变换
image_out=s.*ff;
image_out=ifft2(ifftshift(image_out));
%模值
image_out=abs(image_out);
%归一化显示
image_out=image_out/max(image_out(:));

2、理想低通滤波器ideal_filter源码

function image_out=ideal_filter(imagn_in,freq)
%ideal_filter 理想的频率低通滤波器
%imagn_in 输入的灰度图像
%freq 低通滤波器的截止频率
%image_out 理想低通滤波器的输出值
[M,N]=size(imagn_in);
image_out=ones(M,N);
for i=1:M
    for j=1:N
        if(sqrt((i-M/2)^2+(j-N/2)^2)>freq)
            image_out(i,j)=0;
        end
    end
end

3、高斯低通滤波器imgaussflpf源码

function image_out=imgaussflpf(image_in,sigma)
%imgaussflpf 构造频率高斯低通滤波器
%image_in 输入的灰度图像
%sigma 高斯函数的标准差参数
[M,N]=size(image_in);
image_out=ones(M,N);
for i=1:M
    for j=1:N       
           image_out(i,j)=exp(-((i-M/2)^2+(j-N/2)^2)/2/sigma^2);
    end
end

4、高斯高通滤波器imgaussfhpf源码

function image_out=imgaussfhpf(image_in,sigma)
%imgaussfhpf 构造频率高斯高通滤波器
%image_in 输入的灰度图像
%sigma 高斯函数的标准差参数
[M,N]=size(image_in);
image_out=ones(M,N);
for i=1:M
    for j=1:N       
           image_out(i,j)=1-exp(-((i-M/2)^2+(j-N/2)^2)/2/sigma^2);
    end
end

5、拉普拉斯滤波器imlapfilter源码

function image_out=imlapfilter(image_in)
%imlapfilter 构造频率拉普拉斯滤波器
%image_in 输入的灰度图像
%sigma 高斯函数的标准差参数
[M,N]=size(image_in);
image_out=ones(M,N);
for i=1:M
    for j=1:N
        image_out(i,j)=-((i-M/2)^2+(j-N/2)^2);    
    end
end

6、高斯带阻滤波器imgaussfbrf源码

function image_out=imgaussfbrf(image_in,freq,width)
%imgaussfbrf 构造频率高斯带阻滤波器
%image_in 输入的灰度图像
%freq 阻带中心频率
%width 阻带宽度
[M,N]=size(image_in);
image_out=ones(M,N);
for i=1:M
    for j=1:N       
        image_out(i,j)=1-exp(-0.5*((((i-M/2)^2+(j-N/2)^2)-freq^2)/(sqrt(i.^2+j^2)*width)^2));       
    end
end

7、周期噪声imtnoise源码

function image_out=imtnoise(image_in,A,f)
%imtnoise 添加周期噪声
%A 噪声幅度
%f 噪声频率
%image_in 输入的灰度图像
[M,N]=size(image_in);
image_out=ones(M,N);
for i=1:M
    for j=1:N       
        image_out(i,j)=image_out(i,j)+A*sin(f*i)+A*sin(f*j);      
    end
end

8、理想低通滤波器的Matlab仿真源码

clear all;
clc;
close all;
%读取图像
I=imread('leno_old.png');
I1=rgb2gray(I);
%生成滤镜
ff1=ideal_filter(I1,20);
ff2=ideal_filter(I1,40);
ff3=ideal_filter(I1,60);
%应用滤镜
B1=imfreqfilter(I1,ff1);
B2=imfreqfilter(I1,ff2);
B3=imfreqfilter(I1,ff3);
%计算fft并显示
temp=log(1+abs(fftshift(fft2(I1))));
temp1=log(1+abs(fftshift(fft2(B1))));
temp2=log(1+abs(fftshift(fft2(B2))));
temp3=log(1+abs(fftshift(fft2(B3))));
subplot(2,2,1);
imshow(I1);
title('原图');
subplot(2,2,2);
imshow(B1);
title('20理想低通滤波图像B1');
subplot(2,2,3);
imshow(B2);
title('40理想低通滤波图像B2');
subplot(2,2,4);
imshow(B3);
title('60理想低通滤波图像B3');

9、高斯低通滤波器的Matlab仿真源码

clear all;
clc;
close all;
%读取图像
I=imread('leno_old.png');
I1=rgb2gray(I);
%生成滤镜
ff1=imgaussflpf(I1,20);
ff2=imgaussflpf(I1,40);
ff3=imgaussflpf(I1,60);
%应用滤镜
B1=imfreqfilter(I1,ff1);
B2=imfreqfilter(I1,ff2);
B3=imfreqfilter(I1,ff3);
%计算fft并显示
temp=log(1+abs(fftshift(fft2(I1))));
temp1=log(1+abs(fftshift(fft2(B1))));
temp2=log(1+abs(fftshift(fft2(B2))));
temp3=log(1+abs(fftshift(fft2(B3))));
subplot(2,2,1);
imshow(I1);
title('原图');
subplot(2,2,2);
imshow(B1);
title('20高斯低通滤波图像B1');
subplot(2,2,3);
imshow(B2);
title('40高斯低通滤波图像B2');
subplot(2,2,4);
imshow(B3);
title('60高斯低通滤波图像B3');

10、高斯高通滤波器的Matlab仿真源码

clear all;
clc;
close all;
%读取图像
I=imread('leno_old.png');
I1=rgb2gray(I);
%生成滤镜
ff1=imgaussfhpf(I1,20);
ff2=imgaussfhpf(I1,40);
ff3=imgaussfhpf(I1,60);
%应用滤镜
B1=imfreqfilter(I1,ff1);
B2=imfreqfilter(I1,ff2);
B3=imfreqfilter(I1,ff3);
%计算fft并显示
temp=log(1+abs(fftshift(fft2(I1))));
temp1=log(1+abs(fftshift(fft2(B1))));
temp2=log(1+abs(fftshift(fft2(B2))));
temp3=log(1+abs(fftshift(fft2(B3))));
subplot(2,2,1);
imshow(I1);
title('原图');
subplot(2,2,2);
imshow(B1);
title('20高斯高通滤波图像B1');
subplot(2,2,3);
imshow(B2);
title('40高斯高通滤波图像B2');
subplot(2,2,4);
imshow(B3);
title('60高斯高通滤波图像B3');

11、拉普拉斯滤波器的Matlab仿真源码

clear all;
clc;
close all;
%读取图像
I=imread('leno_old.png');
I1=rgb2gray(I);
%生成滤镜
ff1=imlapfilter(I1);
%应用滤镜
B1=imfreqfilter(I1,ff1);
%计算fft并显示
temp=log(1+abs(fftshift(fft2(I1))));
subplot(2,1,1);
imshow(I1);
title('原图');
subplot(2,1,2);
imshow(B1);
title('拉普拉斯滤波图像B1');

12、高斯带阻滤波器的Matlab仿真源码

clear all;
clc;
close all;
%读取图像
I=imread('leno_old.png');
I1=rgb2gray(I);
%添加噪声
B1=imtnoise(I1,20,20);
%生成滤镜
ff=imgaussfbrf(I1,50,5);
%应用滤镜
B2=imfreqfilter(I1,ff);
subplot(2,2,1);
imshow(I1);
title('原图');
subplot(2,2,2);
imshow(B1);
title('噪声图像B1');
subplot(2,2,3);
imshow(I1);
title('原图');
subplot(2,2,4);
imshow(B2);
title('高斯带阻滤波图像B2');
  • 28
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是利用不同滤波器进行图像锐化处理的 Matlab 代码: 1. 巴特沃斯滤波器锐化图像 ```matlab % 读入图像 img = imread('lena.png'); % 将图像转为灰度图 grayImg = rgb2gray(img); % 设计巴特沃斯滤波器 n = 4; % 阶数 Wn = 0.5; % 截止频率 [b, a] = butter(n, Wn, 'high'); % 设计滤波器 % 对图像进行滤波处理 filteredImg = filter(b, a, double(grayImg)); % 对滤波后的图像进行锐化处理 sharpenedImg = grayImg - uint8(filteredImg); % 显示原图和锐化后的图像 subplot(1, 2, 1); imshow(grayImg); title('Original Image'); subplot(1, 2, 2); imshow(sharpenedImg); title('Sharpened Image (Butterworth)'); ``` 2. 高斯高通滤波器锐化图像 ```matlab % 读入图像 img = imread('lena.png'); % 将图像转为灰度图 grayImg = rgb2gray(img); % 设计高斯高通滤波器 sigma = 2; % 高斯核标准差 hsize = 11; % 高斯核大小 G = fspecial('gaussian', hsize, sigma); G = G / sum(G(:)); % 归一化 h = -G; h((hsize+1)/2, (hsize+1)/2) = h((hsize+1)/2, (hsize+1)/2) + 2; % 对图像进行滤波处理 filteredImg = imfilter(double(grayImg), h, 'replicate'); % 对滤波后的图像进行锐化处理 sharpenedImg = grayImg - uint8(filteredImg); % 显示原图和锐化后的图像 subplot(1, 2, 1); imshow(grayImg); title('Original Image'); subplot(1, 2, 2); imshow(sharpenedImg); title('Sharpened Image (Gaussian)'); ``` 3. 指数高通滤波器锐化图像 ```matlab % 读入图像 img = imread('lena.png'); % 将图像转为灰度图 grayImg = rgb2gray(img); % 设计指数高通滤波器 alpha = 0.5; % 滤波器参数 filteredImg = grayImg - imfilter(grayImg, fspecial('average', 3), 'replicate'); filteredImg = grayImg + alpha * filteredImg; % 对滤波后的图像进行锐化处理 sharpenedImg = grayImg - uint8(filteredImg); % 显示原图和锐化后的图像 subplot(1, 2, 1); imshow(grayImg); title('Original Image'); subplot(1, 2, 2); imshow(sharpenedImg); title('Sharpened Image (Exponential)'); ``` 4. 梯形高通滤波器锐化图像 ```matlab % 读入图像 img = imread('lena.png'); % 将图像转为灰度图 grayImg = rgb2gray(img); % 设计梯形高通滤波器 hsize = 3; % 滤波器大小 h = [-1, -1, -1; -1, 9, -1; -1, -1, -1]; % 对图像进行滤波处理 filteredImg = imfilter(double(grayImg), h, 'replicate'); % 对滤波后的图像进行锐化处理 sharpenedImg = grayImg - uint8(filteredImg); % 显示原图和锐化后的图像 subplot(1, 2, 1); imshow(grayImg); title('Original Image'); subplot(1, 2, 2); imshow(sharpenedImg); title('Sharpened Image (Trapezoid)'); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰的FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值