对于此运算,数组的大小不兼容。 出错 pinggyu (第 15 行) H_lp = exp(-(0.5*(meshgrid(1:N)-N/2).^2 + 0.5*(meshgrid(1:M)'-M/2).^2) / (2*D0^2)); % 高斯函数
时间: 2023-10-30 07:07:17 浏览: 68
非常抱歉,我之前提供的代码有一个错误。在计算高斯函数时,我使用了错误的尺寸。以下是修正后的代码:
```matlab
% 读取图像
img = imread('input_image.jpg');
% 转换为灰度图像
gray_img = rgb2gray(img);
% 傅里叶变换
F = fftshift(fft2(double(gray_img)));
% 图像尺寸
[M, N] = size(F);
% 低通滤波(高斯滤波)
D0 = 50; % 截止频率
[X, Y] = meshgrid(1:N, 1:M);
H_lp = exp(-(0.5*((X-N/2).^2 + (Y-M/2).^2)) / (2*D0^2)); % 高斯函数
filtered_img1 = real(ifft2(ifftshift(F .* H_lp)));
% 高通滤波(理想滤波器)
D0 = 50; % 截止频率
H_hp = ones(M, N);
H_hp((M/2-D0):(M/2+D0), (N/2-D0):(N/2+D0)) = 0; % 截止频率内为0,其余为1
filtered_img2 = real(ifft2(ifftshift(F .* H_hp)));
% 带阻滤波(巴特沃斯滤波器)
D0 = 50; % 截止频率
n = 4; % 阶数
H_bs = 1 ./ (1 + (((X-N/2).^2 + (Y-M/2).^2) ./ (D0^2)).^n); % 巴特沃斯函数
filtered_img3 = real(ifft2(ifftshift(F .* H_bs)));
% 同态滤波
sigma = 10; % 控制对比度增强的参数
gamma_l = 0.3; % 低频部分增益
gamma_h = 1.5; % 高频部分增益
H_hom = gamma_h - gamma_l * exp(-sigma^2 * ((X-N/2).^2 + (Y-M/2).^2)); % 同态滤波函数
filtered_img4 = real(ifft2(ifftshift(F .* H_hom)));
% 显示结果
subplot(2, 3, 1), imshow(img), title('原始图像');
subplot(2, 3, 2), imshow(gray_img), title('灰度图像');
subplot(2, 3, 3), imshow(filtered_img1, []), title('低通滤波');
subplot(2, 3, 4), imshow(filtered_img2, []), title('高通滤波');
subplot(2, 3, 5), imshow(filtered_img3, []), title('带阻滤波');
subplot(2, 3, 6), imshow(filtered_img4, []), title('同态滤波');
```
请注意,我已经根据图像尺寸重新计算了高斯函数、巴特沃斯函数和同态滤波函数。这样可以确保滤波器的尺寸与图像尺寸相匹配。