分析用理想高通滤波器、巴特沃斯高通滤波器、高斯高通滤波器对一幅灰度图像处理的结果
时间: 2023-10-29 12:06:19 浏览: 110
理想高通滤波器、巴特沃斯高通滤波器、高斯高通滤波器都是常见的图像高通滤波器,它们都可以用来增强图像的高频细节信息。但是它们的处理结果有所不同。
理想高通滤波器在频域上是一个带阻滤波器,可以完全去除低频分量,但同时也会引入振铃现象,即在滤波后的图像中会出现环状的亮暗交错条纹。这是因为理想高通滤波器具有无限长的冲激响应,不能被完美地实现。因此,理想高通滤波器的处理结果可能会出现不自然的锐化效果和振铃现象。
巴特沃斯高通滤波器是一种幅度响应呈现平滑曲线的滤波器,可以有效地去除低频分量,同时减少振铃现象的出现。但是,它的设计比较复杂,需要选择合适的截止频率和阶数。
高斯高通滤波器也可以去除低频分量,但是它的特点是在频域上呈现出类似于高斯分布的幅度响应曲线。这种滤波器可以有效地去除低频分量,但是对高频分量的保留程度比巴特沃斯高通滤波器低一些。因此,高斯高通滤波器的处理结果可能会比巴特沃斯高通滤波器更加平滑一些。
综合来看,对于灰度图像的处理,巴特沃斯高通滤波器和高斯高通滤波器都比理想高通滤波器更加适合。具体选择哪种滤波器要根据实际应用场景和需求来定。
相关问题
利用巴特沃斯滤波器、高斯高通滤波器、指数高通滤波器、梯形高通滤波器分别对图像进行锐化处理的matlab代码
以下是利用不同滤波器进行图像锐化处理的 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)');
```
编写一个程序,实现:输入一副图像(灰度图像),实现理想低通、巴特沃斯低通、高斯低通滤波、理想高通、巴特沃斯高通、高斯高通滤波,输出滤波结果图。
以下是Python的实现:
``` python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图像
img = cv2.imread('input.jpg', 0)
# 傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
# 幅度谱
magnitude_spectrum = 20*np.log(np.abs(fshift))
# 理想低通滤波器
def ideal_lowpass_filter(size, cutoff):
rows, cols = size
crow, ccol = rows/2, cols/2
mask = np.zeros((rows, cols), np.uint8)
mask[int(crow)-cutoff:int(crow)+cutoff, int(ccol)-cutoff:int(ccol)+cutoff] = 1
return mask
# 巴特沃斯低通滤波器
def butterworth_lowpass_filter(size, cutoff, n):
rows, cols = size
crow, ccol = rows/2, cols/2
mask = np.zeros((rows, cols), np.uint8)
for i in range(rows):
for j in range(cols):
distance = np.sqrt((i-crow)**2 + (j-ccol)**2)
mask[i, j] = 1/(1+(distance/cutoff)**(2*n))
return mask
# 高斯低通滤波器
def gaussian_lowpass_filter(size, cutoff):
rows, cols = size
crow, ccol = rows/2, cols/2
x = np.arange(cols)
y = np.arange(rows)
x, y = np.meshgrid(x, y)
mask = np.exp(-((x-ccol)**2+(y-crow)**2)/(2*cutoff**2))
return mask
# 理想高通滤波器
def ideal_highpass_filter(size, cutoff):
rows, cols = size
crow, ccol = rows/2, cols/2
mask = np.ones((rows, cols), np.uint8)
mask[int(crow)-cutoff:int(crow)+cutoff, int(ccol)-cutoff:int(ccol)+cutoff] = 0
return mask
# 巴特沃斯高通滤波器
def butterworth_highpass_filter(size, cutoff, n):
rows, cols = size
crow, ccol = rows/2, cols/2
mask = np.zeros((rows, cols), np.uint8)
for i in range(rows):
for j in range(cols):
distance = np.sqrt((i-crow)**2 + (j-ccol)**2)
mask[i, j] = 1/(1+(cutoff/distance)**(2*n))
return mask
# 高斯高通滤波器
def gaussian_highpass_filter(size, cutoff):
rows, cols = size
crow, ccol = rows/2, cols/2
x = np.arange(cols)
y = np.arange(rows)
x, y = np.meshgrid(x, y)
mask = 1 - np.exp(-((x-ccol)**2+(y-crow)**2)/(2*cutoff**2))
return mask
# 理想低通滤波
ideal_lp = fshift * ideal_lowpass_filter(img.shape, 30)
ideal_lp_img = np.abs(np.fft.ifft2(np.fft.ifftshift(ideal_lp)))
# 巴特沃斯低通滤波
butterworth_lp = fshift * butterworth_lowpass_filter(img.shape, 30, 2)
butterworth_lp_img = np.abs(np.fft.ifft2(np.fft.ifftshift(butterworth_lp)))
# 高斯低通滤波
gaussian_lp = fshift * gaussian_lowpass_filter(img.shape, 30)
gaussian_lp_img = np.abs(np.fft.ifft2(np.fft.ifftshift(gaussian_lp)))
# 理想高通滤波
ideal_hp = fshift * ideal_highpass_filter(img.shape, 30)
ideal_hp_img = np.abs(np.fft.ifft2(np.fft.ifftshift(ideal_hp)))
# 巴特沃斯高通滤波
butterworth_hp = fshift * butterworth_highpass_filter(img.shape, 30, 2)
butterworth_hp_img = np.abs(np.fft.ifft2(np.fft.ifftshift(butterworth_hp)))
# 高斯高通滤波
gaussian_hp = fshift * gaussian_highpass_filter(img.shape, 30)
gaussian_hp_img = np.abs(np.fft.ifft2(np.fft.ifftshift(gaussian_hp)))
# 显示结果
plt.subplot(331), plt.imshow(img, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(332), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.subplot(333), plt.imshow(ideal_lp_img, cmap='gray')
plt.title('Ideal Lowpass Filter'), plt.xticks([]), plt.yticks([])
plt.subplot(334), plt.imshow(butterworth_lp_img, cmap='gray')
plt.title('Butterworth Lowpass Filter'), plt.xticks([]), plt.yticks([])
plt.subplot(335), plt.imshow(gaussian_lp_img, cmap='gray')
plt.title('Gaussian Lowpass Filter'), plt.xticks([]), plt.yticks([])
plt.subplot(336), plt.imshow(ideal_hp_img, cmap='gray')
plt.title('Ideal Highpass Filter'), plt.xticks([]), plt.yticks([])
plt.subplot(337), plt.imshow(butterworth_hp_img, cmap='gray')
plt.title('Butterworth Highpass Filter'), plt.xticks([]), plt.yticks([])
plt.subplot(338), plt.imshow(gaussian_hp_img, cmap='gray')
plt.title('Gaussian Highpass Filter'), plt.xticks([]), plt.yticks([])
plt.show()
```
其中,`ideal_lowpass_filter`、`butterworth_lowpass_filter`、`gaussian_lowpass_filter`、`ideal_highpass_filter`、`butterworth_highpass_filter`、`gaussian_highpass_filter` 分别为六种滤波器的实现函数。这里的例子中使用的是 30 作为截止频率,可以根据需要进行调整。最终的结果如下图所示:
![image](https://user-images.githubusercontent.com/44194626/128274797-2a62a5ec-e9f2-4c6e-9b7d-d6f7a71b4c0f.png)
阅读全文