错误使用 - 整数只能与同类的整数或双精度标量值组合使用。 出错 lena (第 43 行) subplot(2,2,4);imshow(img-g,[]);title('High Pass Filtered Image');
时间: 2024-02-18 15:04:04 浏览: 103
DB2函数大全
这个错误的原因是在进行减法操作时,MATLAB不允许将整数与逻辑矩阵相减。为了解决这个问题,我们需要将图像转换为双精度格式。我们可以使用`im2double`函数将图像转换为双精度格式。修改后的代码如下:
```matlab
% 读取图像并显示
img = imread('lena.png');
imshow(img);
% 傅里叶变换及幅度谱计算
F = fft2(double(img));
S = abs(F);
S = log(1+S);
imshow(S, []);
% 理想低通滤波器
D0 = 50;
H = zeros(512,512);
for i=1:512
for j=1:512
if sqrt((i-256)^2+(j-256)^2) <= D0
H(i,j) = 1;
end
end
end
% 理想高通滤波器
D0 = 50;
H = zeros(512,512);
for i=1:512
for j=1:512
if sqrt((i-256)^2+(j-256)^2) >= D0
H(i,j) = 1;
end
end
end
% 将滤波器应用于图像的傅里叶变换
G = H.*F;
% 反傅里叶变换
g = real(ifft2(G));
% 显示原始图像、幅度谱、低通和高通滤波的结果图像
subplot(2,2,1);imshow(img);title('Original Image');
subplot(2,2,2);imshow(S, []);title('Spectrum');
subplot(2,2,3);imshow(ifft2(H.*F),[]);title('Low Pass Filtered Image');
subplot(2,2,4);imshow(img-im2double(g),[]);title('High Pass Filtered Image');
```
现在,我们使用`im2double`将`g`转换为双精度格式,然后将其从`img`中减去。这样做后,我们就可以在第四个子图中显示高通滤波后的图像。
阅读全文