MATLAB编程实现图像的理想低通和高通滤波;巴特沃斯低通和高通滤波;高斯低通和高通滤波;同态滤波的代码要求显示滤波前后的图像和频谱
时间: 2023-06-04 21:09:06 浏览: 114
我可以回答您的问题。以下是有关MATLAB编程的图像理想低通和高通滤波、巴特沃斯低通和高通滤波、高斯低通和高通滤波以及同态滤波的代码。每个代码块都会显示滤波前后的图像和频谱。
理想低通和高通滤波代码:
```matlab
% 读取图像
img = imread('image.jpg');
% 转成灰度图
gray_img = rgb2gray(img);
% 计算理想低通滤波器
D = 50; % 截止频率
N = 4; % 阶数
LPF = my_ideal_LPF(length(gray_img), length(gray_img), D, N);
% 用低通滤波器过滤图像
lowpass_img = uint8(real(ifft2(ifftshift(fftshift(fft2(double(gray_img))).* LPF))));
% 计算理想高通滤波器
HPF = my_ideal_HPF(length(gray_img), length(gray_img), D, N);
% 用高通滤波器过滤图像
highpass_img = uint8(real(ifft2(ifftshift(fftshift(fft2(double(gray_img))).* HPF))));
% 显示滤波后的图像和频谱
subplot(2, 2, 1), imshow(gray_img), title('原图');
subplot(2, 2, 2), imshow(lowpass_img), title('理想低通滤波');
subplot(2, 2, 3), imshow(HPF), title('理想高通滤波');
subplot(2, 2, 4), imshow(highpass_img), title('理想高通滤波');
```
巴特沃斯低通和高通滤波代码:
```matlab
% 读取图像
img = imread('image.jpg');
% 转成灰度图
gray_img = rgb2gray(img);
% 计算巴特沃斯低通滤波器
D = 50; % 截止频率
N = 4; % 阶数
LPF = my_butterworth_LPF(length(gray_img), length(gray_img), D, N);
% 用低通滤波器过滤图像
lowpass_img = uint8(real(ifft2(ifftshift(fftshift(fft2(double(gray_img))).* LPF))));
% 计算巴特沃斯高通滤波器
HPF = my_butterworth_HPF(length(gray_img), length(gray_img), D, N);
% 用高通滤波器过滤图像
highpass_img = uint8(real(ifft2(ifftshift(fftshift(fft2(double(gray_img))).* HPF))));
% 显示滤波后的图像和频谱
subplot(2, 2, 1), imshow(gray_img), title('原图');
subplot(2, 2, 2), imshow(lowpass_img), title('巴特沃斯低通滤波');
subplot(2, 2, 3), imshow(HPF), title('巴特沃斯高通滤波');
subplot(2, 2, 4), imshow(highpass_img), title('巴特沃斯高通滤波');
```
高斯低通和高通滤波代码:
```matlab
% 读取图像
img = imread('image.jpg');
% 转成灰度图
gray_img = rgb2gray(img);
% 计算高斯低通滤波器
D = 50; % 截止频率
LPF = my_gaussian_LPF(length(gray_img), length(gray_img), D);
% 用低通滤波器过滤图像
lowpass_img = uint8(real(ifftshift(ifft2(fftshift(fft2(double(gray_img))).* LPF))));
% 计算高斯高通滤波器
HPF = my_gaussian_HPF(length(gray_img), length(gray_img), D);
% 用高通滤波器过滤图像
highpass_img = uint8(real(ifftshift(ifft2(fftshift(fft2(double(gray_img))).* HPF))));
% 显示滤波后的图像和频谱
subplot(2, 2, 1), imshow(gray_img), title('原图');
subplot(2, 2, 2), imshow(lowpass_img), title('高斯低通滤波');
subplot(2, 2, 3), imshow(HPF), title('高斯高通滤波');
subplot(2, 2, 4), imshow(highpass_img), title('高斯高通滤波');
```
同态滤波代码:
```matlab
% 读取图像
img = imread('image.jpg');
% 转成灰度图
gray_img = rgb2gray(img);
% 将灰度图取对数
gray_log = log(double(gray_img) + 1);
% 傅里叶变换
F = fft2(gray_log);
% 计算同态滤波器
c = 1;
D0 = 10;
n = 1;
H = my_homomorphic_filter(length(gray_img), length(gray_img), c, D0, n);
% 滤波
G = H .* F;
% 反傅里叶变换
g = real(ifft2(G));
% exp运算还原图像
gray_res = uint8(exp(g) - 1);
% 显示滤波后的图像和频谱
subplot(2, 2, 1), imshow(gray_img), title('原图');
subplot(2, 2, 2), imshow(gray_res), title('同态滤波');
subplot(2, 2, 3), imshow(log(abs(fftshift(F)) + 1), []), title('原图频谱');
subplot(2, 2, 4), imshow(log(abs(fftshift(G)) + 1), []), title('滤波后的频谱');
```
希望我的回答能够帮到您!
阅读全文