• python理想低通滤波、巴特沃斯低通滤波、高斯低通滤波实现
千次阅读
2021-10-07 16:45:27

# 代码

代码如下（示例）：

import numpy as np
import cv2 as cv
image = cv.imread('2.PNG')
# print(image.shape)
image = cv.cvtColor(image,cv.COLOR_BGR2GRAY)#图像灰度图
# print(image.shape)
def frequency_filter(image ,filter):
"""
:param image:
:param filter: 频域变换函数
:return:
"""
fftImg = np.fft.fft2(image) #对图像进行傅里叶变换
fftImgShift = np.fft.fftshift(fftImg)#傅里叶变换后坐标移动到图像中心
handle_fftImgShift1 = fftImgShift*filter#对傅里叶变换后的图像进行频域变换

handle_fftImgShift2 = np.fft.ifftshift(handle_fftImgShift1)
handle_fftImgShift3 = np.fft.ifft2(handle_fftImgShift2)
handle_fftImgShift4 = np.real(handle_fftImgShift3)#傅里叶反变换后取频域
return np.uint8(handle_fftImgShift4)

def ILPF(image,d0,n):#理想低通滤波器
H = np.empty_like(image,dtype=float)
M,N = image.shape
mid_x = int(M/2)
mid_y = int(N/2)
for y in range(0, M):
for x in range(0,N):
d = np.sqrt((x - mid_x) ** 2 + (y - mid_y) ** 2)
if d <= d0:
H[y, x] = 1**n
else:
H[y, x] = 0**n
return H

def BLPF(image,d0,n):#巴特沃斯低通滤波器
H = np.empty_like(image,float)
M,N = image.shape
mid_x = int(M/2)
mid_y = int(N/2)
for y in range(0, M):
for x in range(0, N):
d = np.sqrt((x - mid_x) ** 2 + (y - mid_y) ** 2)
H[y,x] = 1/(1+(d/d0)**(n))
return H

def GLPF(image,d0,n):#高斯低通滤波器
H = np.empty_like(image,float)
M, N = image.shape
mid_x = M/2
mid_y = N/2
for x in range(0, M):
for y in range(0, N):
d = np.sqrt((x - mid_x)**2 + (y - mid_y) ** 2)
H[x, y] = np.exp(-d**n/(2*d0**n))
return H

def image_arrage(image,W,H,n,d0,step,filter):#图像绘制
"""
:param image: 原始图像
:param W: 每列图像个数
:param H: 每行图像个数
:param n: 阶数
:param d0: 初始截止频率
:param step: 截止频率步距
:return: None
"""
imageHstack = {}
for i in range(H):
hStack = 'H'+str(i)
flag = 0
for i in range(W):
if flag ==0:
imageHstack[hStack] = frequency_filter(image,filter(image,d0,n))
d0 += step
flag +=1
else:
imageHstack[hStack] = np.hstack((imageHstack[hStack], frequency_filter(image, filter(image, d0, n))))
d0 += step
flag += 1
flag = 0
for i in imageHstack.values():

if  flag == 0:
imageStack = i
flag += 1
else:
imageStack = np.vstack((imageStack,i))
# print(imageStack)
return imageStack

# cv.namedWindow('Img')
# cv.resizeWindow('Img',(20,20))
# cv.imshow('Img',frequency_filter(image,ILPF(image,60)))
# cv.namedWindow('Img2')
# cv.resizeWindow('Img2',(20,20))
# cv.imshow('Img2',frequency_filter(image,BLPF(image,40,n=2)))
# cv.namedWindow('Img3')
# cv.resizeWindow('Img3',(20,20))
# imghstack = np.hstack((imgroi, imgwomen))
# # 垂直组合
# imgvstack = np.vstack((imgroi, imgwomen))
cv.imshow('Img3',image_arrage(image,4,2,2,30,20,BLPF))

# cv.resizeWindow('Img3',(20,20))
# cv.imshow('Img3',frequency_filter(image,GLPF(image,80,n=2)))
cv.waitKey()


# 高斯低通滤波结果

更多相关内容
• 巴特沃斯低通滤波matlab实现代码 DIP-Filter 1.概况 项目：实现一个通用的高通、低通、带通和带阻滤波器函数。其中又分别实现理想、巴特沃思和指数等滤波形式。用实现的函数对图1（lena_noise.bmp）进行低通处理，图...
• 低通滤波-加速度计，详细代码，数据结果 ，数据说明
• 关于一阶低通滤波的算法研究，想找LPF滤波资料有没有的同学请看这里
• 实验作业5: 1用理想低通滤波器在频率域实现低通滤波 程序代码 I二imread'd:/jpg; I=rgb2gray(l; figure(1,imshow(l; title'原图像) s=fftshift(fft2 (I; figure(2; imshow(abs(s,[]; title'图像傅里叶变换所得频谱; ...
• 采用matlab实现巴特沃斯低通滤波，对信号Mix_Signal_1 和 Mix_Signal_2 分别作巴特沃斯低通滤波
• 借用python巴特沃斯低通滤波公式得到滤波参数，用C语言概念写出滤波公式
• matlab频域低通滤波代码 数字图像的频域滤波 1）设定截止频率D0 =100，试分别构建256×256的频域理想低通滤波器（ILPF）和频域理想高通滤波器（IHPF）。编写 MATLAB 代码，分别画出它们的频域滤波器响应 3D图及其...
• MatLab理想低通滤波及高通滤波实现高频增强实验报告.pdf
• 采用C语言方式实现了FIR低通滤波，并用matlab对其进行仿真，经比较结果一致
• 我们已经介绍了频域中三种类型的低通滤波的代码； 1.理想低通滤波器（ILPF）（问题？） 2. 巴特沃斯低通滤波器 (BLPF) 3. 高斯低通滤波器（GLPF） 您可以清楚地观察到低通滤波器输出中的振铃效应问题。 振铃效应的...
• 本文主要介绍的是DAC数模转换后缓冲低通滤波电路。
• 一阶低通滤波算法(Yn=a*Xn+(1-a)*Y(n-1))对周期性干扰具有良好的抑制作用，适用于波动频繁的参数滤波，其不足之处是带来了相位滞后，灵敏度低。滞后的程度取决于a值的大小。同时，它不能滤除频率高于采样频率1/2...
• 基于matlab的理想低通滤波图像增强并给出其PSNR指标
• 可用于图像处理，实现高斯低通滤波
• 二阶iir低通滤波器，具体滤波参数可以通过matlab得出后修改 由于是很久以前写的测试程序，所以没做多少注释，看不懂的可以私聊我
• 高斯滤波器的matlab实现，不是matlab自带的函数。
• 本程序基于matlab平台编写，使用不同的低通滤波算法对含有噪声图形进行处理，以对比其去噪效果。
• 设计一种压控电压源型二阶有源低通滤波电路，并利用Multisim10仿真软件对电路的频率特性、特征参量等进...
• 该程序旨在演示频域滤波的概念，这里我们使用 2D DFT 将给定​​的图像转换为频域。
• 理论和实验研究了液体粘滞系数对声低通滤波光纤水听器声压灵敏度频响特性的影响。为了更好地描述声低通滤波光纤水听器的声学特性, 在已建立的低频集中参量模型中, 引入了一个用于描述系统机械损耗的参量, 即机械声阻...
• 该文通过深入分析夜间有雾图像的成像特点，提出了基于低通滤波和多特征联合优化的夜间图像去雾算法。针对夜间图像环境光照不均匀问题，提出先对图像进行低通滤波，然后对其低频分量三通道利用最小-最大值滤波估计...
• 这个程序是一个测量电容的完整程序，里面使用了基于STM32F4自带的DSP库的FIR低通滤波器，滤波器参数需要使用MATLAB的fdatool工具生成。网上可以搜到相关教程。
• 基于c的图像处理程序，高通，低通滤波。程序比较简单。
• ## 低通滤波

千次阅读 2021-04-27 12:54:31
低通滤波 1.硬件低通滤波 2.软件低通滤波

# 低通滤波

1.硬件低通滤波

公式推导
一阶RC滤波器的硬件电路如图：

图中输入电压是Vi，电阻R，电容C，输出电压为Vo。

假设电路的输出阻抗很大（即不带任何负载），输入阻抗很小（理想情况）。可以得到以下公式：

电容的阻抗是:

那么截止频率为：

此频率下的信号，通过这个电路，输出电压和输入电压的关系式是

或者时域上的表达式：

上式离散后，可以得到：

假如要过滤掉10KHz以上的频率，可以选择fcut = 1K，并计算RC的值，代入上式。

2.软件低通滤波

• 软件实现1
/**
* @brief  implement 1 order RC low pass filter
*         raw data filtered by a simple RC low pass filter@cufoff=5Hz
* @param  Vi 		: 	Vi(k)
* @param  Vi_p 	: 	Vi(k-1)
* @param  Vo 		: 	Vo(k)
* @param  Vo_p 	: 	Vo(k-1)
* @note   This example shows a simple way to report end of conversion
*         and get conversion result. You can add your own implementation.
* @retval None
*/
void Filter_RC_LPF(float *Vi, float *Vo, float *Vo_p, float sampleFrq )
{
float CutFrq, RC, Cof1, Cof2;

//low pass filter @cutoff frequency = 5 Hz
CutFrq = 5;
RC = (float)1.0/2.0/PI/CutFrq;
Cof1 = 1/(1+RC*sampleFrq);
Cof2 = RC*sampleFrq/(1+RC*sampleFrq);
*Vo = Cof1 * (*Vi) + Cof2 * (*Vo_p);

//update
*Vo_p = *Vo;
}

• 软件实现2
//*********** Structure Definition ********//
typedef struct {
float  Vi;
float  Vo_prev;
float  Vo;
float  Fcutoff;
float  Fs;
} LPF_RC_T;
//*********** Structure Init Function ****//
void filter_RC_LPF_init(LPF_RC_T*v)
{
v->Vi=0;
v->Vo_prev=0;
v->Vo=0;

//low pass filter @cutoff frequency = 5 Hz
v->Fcutoff=5;

// execute 1000 every second
v->Fs=1000;
}

//*********** Function Definition ********//
float filter_RC_LPF(LPF_RC_T*v)
{
float RC, Cof1, Cof2;

RC = (float)1.0/2.0/PI/v->Fcutoff;
Cof1 = 1/(1+RC*v->Fs);
Cof2 = RC*v->Fs/(1+RC*v->Fs);

v->Vo = Cof1 * v->Vi + Cof2 * v->Vo_prev;

v->Vo_prev = v->Vo;

return v->Vo;
}


展开全文
• 本例程展示了信号处理中低通滤波的作用，首先生成一个高斯白噪声，然后对其进行低通滤波。低通滤波器的截止频率和Q值可以自己设定，得到低通滤波器的传输函数后，在经过双线性变换法得到其单位脉冲响应。滤波后对...

本例程展示了信号处理中低通滤波的作用，首先生成一个高斯白噪声，然后对其进行低通滤波。低通滤波器的截止频率和Q值可以自己设定，得到低通滤波器的传输函数后，在经过双线性变换法得到其单位脉冲响应。滤波后对原始信号的频谱和滤波后的信号的频谱进行了对比。

%% 低通滤波器演示程序
%% 生成白噪声信号
clc;clear all; close all;
N = 1000; %采样点数
fs = N;   %采样频率
fre_base = -N/2:N/2-1;
a = randn(N,1); %生成符合高斯分布的随机噪声
F = fftshift((fft(a)))*2/N;  %对其进行快速傅里叶变换
%% 生成低通滤波器
cut_off_freq = 50;
Q = 0.625;
plot_enable_L = 1;
[Hs, H_z] = produce_LPF(cut_off_freq, Q, fs, plot_enable_L);
%% 进行低通滤波
filterd_signal = filter(H_z.num{:}, H_z.den{:}, a);
filter_sig_f = fftshift(fft(filterd_signal))*2/N;
%% 绘图
figure;
subplot(2,1,1); %绘制子图
plot(fre_base,abs(F)); %绘制频率图
xlabel('Hz');
title('原始信号频谱图');
subplot(2,1,2); %绘制子图
plot(fre_base,abs(filter_sig_f)); %绘制频率图
xlabel('Hz');
title('低通滤波后信号频谱图');


产生低通滤波器的子函数代码如下:

function [Hs, H_z] = produce_LPF(cut_off_freq, Q, fs, plot_enable_L)
%% 构造低通滤波器
w0 = 2*pi*cut_off_freq;					% 滤波器截止频率对应的角频率
A=1; B=w0/Q; C=w0^2;                    % 传递函数构造因子
numerator = C;                          % 传递函数的分子的矩阵表示
denominator = [A B C];                  % 传递函数的分母的矩阵表示
disp('二阶低通滤波器的传递函数');
Hs = tf(numerator, denominator)         % 构造模拟低通滤波器传递函数

H_z = c2d(Hs, 1/fs, 'tustin');          % 将滤波器的脉冲响应用双线性变换法离散化

%% 绘制图形
if plot_enable_L == 1
%%计算坐标，画模拟滤波器的频率特性
w = logspace(1,6);                        % 产生10^1到10^4次的对数坐标
hs = freqs(numerator,denominator,w);      % 滤波器的幅频、相频特性曲线

mag = abs(hs);          % 取幅值
phase = angle(hs);      % 取相角
f = w/(2*pi);                           % 将横坐标的单位由rad变为Hz
phase = phase*180/pi;                   % 将纵坐标的单位变为度。

figure; semilogx(f, mag); grid on
xlabel('频率（Hz）'); ylabel('增益'); title('滤波器的幅频特性曲线');

figure; semilogx(f, phase); grid on;
xlabel('频率（Hz）'); ylabel('相位（°）'); title('滤波器的相频特性曲线');

figure; impulse(Hs); grid on
xlabel('时间'); ylabel('幅度'); title('模拟滤波器脉冲响应');

figure; impz(H_z.num{:}, H_z.den{:}); grid on;     %画双线性变换后的数字滤波器的脉冲响应
xlabel('点数'); ylabel('幅度'); title('数字滤波器脉冲响应');
end

end


图1. 低通滤波器的幅频特性曲线

图2. 原始信号及低通滤波后的信号频谱图
由上图我们可以知道，原始信号的频谱弥漫在整个频率轴上，经过低通滤波后的信号的频谱只剩下低频的通带内，高频的分量被抑制掉了。这就是低通滤波器的作用。
展开全文
• 根据所采用的低通滤波器形式，利用时间相量分析方法，推出了滤波误差补偿公式，并在不同的同步速情况下分析比较，确定最佳补偿系数．仿真结果证明，新算法在 PWM波反电动势输入情况下仍具有很高的磁链观测精度，可以...
• 受高斯噪声和椒盐噪声污染的二维图像的去噪方法。 空域滤波降噪以均值滤波和中值滤波为例，频域滤波以傅里叶低通滤波和小波变换去噪为例，分析以上四种方法的滤波降噪特点。
• 巴特沃斯低通滤波器，假设一个信号x(t)=sin(2*pi*f1*t)+sin(2*pi*f2*t)，
• matlab频域低通与高通滤波，包含理想滤波器，巴特沃斯滤波器，高斯滤波器及代码实现

...