数字图像处理实验十理想、高斯、巴特沃斯低通和高通滤波器

利用理想低通、高斯低通、巴特沃斯低通滤波器进行滤波

利用理想高通、高斯高通、巴特沃斯高通滤波器进行滤波

clear;
clc;
%----------------------------图像的灰度化处理-------------------------------
JPG=imread('1.jpg');
JPG=rgb2gray(JPG);

%-----------------------------添加2%椒盐噪声--------------------------------
J=imnoise(JPG,'salt & pepper',0.02);
figure(1);subplot(221);imshow(J);title('原始图像');

%-------------------------添加椒盐噪声后的频谱图----------------------------
F=fft2(J);          %傅里叶变换
F1=log(abs(F)+1);   %取模并进行缩放
% subplot(132);imshow(F1,[]);title('傅里叶变换频谱图');
Fs=fftshift(F);      %FFT频谱中心化,将频谱图中零频率成分移动至频谱图中心
S=log(abs(Fs)+1);    %取模并进行缩放
% subplot(133);imshow(S,[]);title('频移后的频谱图');

%-----------------------------理想低通滤波器--------------------------------
s=fftshift(fft2(im2double(J)));
[m,n0]=size(s);
m0=round(m/2);
n0=round(n0/2);
d0=50; %将理想低通滤波器的截止频率D0设置为50
for i=1:m %双重for循环计算频率点(i,j)与频域中心的距离D(i,j)=sqrt((i-round(m/2)^2+(j-round(n/2)^2))
    for j=1:n0 
        L=sqrt((i-m0)^2+(j-n0)^2);
        if L<=d0  %根据理想低通滤波器产生公式,当D(i,j)<=D0,置为1
            h=1;
        else
            h=0;        %根据理想低通滤波器产生公式,当D(i,j)>D0,置为0
        end
        s(i,j)=h*s(i,j);%频域图像乘以滤波器的系数
    end
end
%real函数取元素的实部
s=real(ifft2(ifftshift(s)));%最后进行二维傅里叶反变换转换为时域图像
subplot(222),imshow(s,[]);
title('理想低通滤波图像'); 

%-----------------------------高斯低通滤波器--------------------------------
s=fftshift(fft2(im2double(J)));
[m,n]=size(s);
d0=30; %将高斯低通滤波器的截止频率D0设置为30
m0=round(m/2);
n0=round(n/2);
for i=1:m
    for j=1:n
        L=sqrt((i-m0)^2+(j-n0)^2);    %根据高斯低通滤波器公式H(u,v)=e^-[D^2(u,v)/(2*D0^2)] 
        h=exp(-(L*L)/(2*(d0^2))); %exp表示以e为底的指数函数
        s(i,j)=h*s(i,j);%频域图像乘以滤波器的系数
    end
end
s=real(ifft2(ifftshift(s)));%最后进行二维傅里叶反变换转换为时域图像
subplot(223),imshow(s,[]); 
title('高斯低通滤波图像');

%---------------------------巴特沃斯低通滤波器------------------------------
s=fftshift(fft2(im2double(J)));
[m,n]=size(s);%求二维傅里叶变换后图像大小
n0=2;            %将巴特沃斯低通滤波器的阶数n设置为2
d0=30;          %将巴特沃斯低通滤波器的截止频率D0设置为30
m1=round(m/2);
n1=round(n/2);
for i=1:m      %双重for循环计算频率点(i,j)与频域中心的距离D(i,j)=sqrt((i-round(m/2)^2+(j-round(n/2)^2))
    for j=1:n 
        L=sqrt((i-m1)^2+(j-n1)^2);
        h=1/(1+(L/d0)^(2*n0));%根据巴特沃斯低通滤波器公式为1/(1+[D(i,j)/D0]^2n)
        s(i,j)=h*s(i,j);%频域图像乘以滤波器的系数
    end
end
%real函数取元素的实部
s=real(ifft2(ifftshift(s)));%最后进行二维傅里叶反变换转换为时域图像
subplot(224),imshow(s,[]);
title('巴特沃斯低通滤波图像');

%---------------------------高通滤波器相关算法------------------------------
PNG=imread('2.png');
PNG=rgb2gray(PNG);
figure(2);subplot(221);imshow(PNG);title('原始图像');

%-----------------------------理想高通滤波器--------------------------------
s=fftshift(fft2(im2double(PNG)));
[m,n]=size(s);
m0=round(m/2);
n0=round(n/2);
d0=50; %将理想高通滤波器的截止频率D0设置为50
for i=1:m %双重for循环计算频率点(i,j)与频域中心的距离D(i,j)=sqrt((i-round(m/2)^2+(j-round(n/2)^2))
    for j=1:n
        L=sqrt((i-m0)^2+(j-n0)^2);
        if L<=d0  %根据理想高通滤波器产生公式,当D(i,j)<=D0,置为0
            h=0;
        else
            h=1;        %根据理想高通滤波器产生公式,当D(i,j)>D0,置为1
        end
        s(i,j)=h*s(i,j);%频域图像乘以滤波器的系数
    end
end
%real函数取元素的实部
s=real(ifft2(ifftshift(s)));%最后进行二维傅里叶反变换转换为时域图像
subplot(222),imshow(s,[]);
title('理想高通滤波图像');

%-----------------------------高斯高通滤波器--------------------------------
s=fftshift(fft2(im2double(PNG)));
[m,n]=size(s);
d0=10; %将高斯高通滤波器的截止频率D0设置为10
m0=round(m/2);
n0=round(n/2);
for i=1:m
    for j=1:n
        L=sqrt((i-m0)^2+(j-n0)^2);    %根据高斯高通滤波器公式H(u,v)=e^-[D^2(u,v)/2*D0^2] 
        h=1-(exp(-(L^2)/(2*(d0^2)))); %exp表示以e为底的指数函数
        s(i,j)=h*s(i,j);%频域图像乘以滤波器的系数
    end
end
s=real(ifft2(ifftshift(s)));%最后进行二维傅里叶反变换转换为时域图像
subplot(223),imshow(s,[]); 
title('高斯高通滤波图像');

%---------------------------巴特沃斯高通滤波器------------------------------
s=fftshift(fft2(im2double(PNG)));
[m,n]=size(s);%求二维傅里叶变换后图像大小
n0=2;            %将巴特沃斯高通滤波器的阶数n设置为2
d0=30;          %将巴特沃斯高通滤波器的截止频率D0设置为30
m1=round(m/2);
n1=round(n/2);
for i=1:m      %双重for循环计算频率点(i,j)与频域中心的距离D(i,j)=sqrt((i-round(m/2)^2+(j-round(n/2)^2))
    for j=1:n 
        L=sqrt((i-m1)^2+(j-n1)^2);
        if L==0
            h=0; 
        else
            h=1/(1+(d0/L)^(2*n0));%根据巴特沃斯高通滤波器公式为1/(1+[D0/D(i,j)]^2n)
        end
        s(i,j)=h*s(i,j);%频域图像乘以滤波器的系数
    end
end
%real函数取元素的实部
s=real(ifft2(ifftshift(s)));%最后进行二维傅里叶反变换转换为时域图像
subplot(224),imshow(s,[]);
title('巴特沃斯高通滤波图像');

低通滤波器效果图

高通滤波器效果图

 

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发求和数据,那么Go语言可能是一个不错的选择。
巴特沃斯滤波器是一种常用的数字滤波器,可以用于信号处理中的低通滤波和高通滤波。它的特点是在通带内具有平坦的幅频响应,而在截止频率附近具有较为陡峭的衰减特性。 Python中可以使用scipy库中的signal模块来实现巴特沃斯滤波器。具体实现步骤如下: 1. 导入需要的库 ```python from scipy import signal import matplotlib.pyplot as plt import numpy as np ``` 2. 定义滤波器参数 ```python # 采样频率 fs = 1000.0 # 截止频率 fc = 50.0 # 通带最大衰减 rp = 1.0 # 阻带最小衰减 rs = 60.0 # 滤波器类型(低通或高通) ftype = 'lowpass' ``` 3. 计算滤波器系数 ```python # 计算阶数和截止频率 order, Wn = signal.buttord(2 * fc / fs, 2 * (fc + 10) / fs, rp, rs) # 计算滤波器系数 b, a = signal.butter(order, Wn, btype=ftype) ``` 4. 使用滤波器进行信号处理 ```python # 生成测试信号 t = np.linspace(0, 1, 1000, endpoint=False) sig = np.sin(2 * np.pi * 50 * t) + 0.5 * np.sin(2 * np.pi * 200 * t) 使用滤波器进行信号处理 filtered_sig = signal.filtfilt(b, a, sig) ``` 5. 绘制滤波前后的信号图像 ```python # 绘制滤波前后的信号图像 fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True) ax1.plot(t, sig) ax1.set_title('Original signal') ax1.axis([0, 1, -2, 2]) ax2.plot(t, filtered_sig) ax2.set_title('Filtered signal') ax2.axis([0, 1, -2, 2]) plt.tight_layout() plt.show() ``` 巴特沃斯高通滤波器的实现与低通滤波器类似,只需要将滤波器类型改为'highpass'即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

放氮气的蜗牛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值