Array dimensions must match for binary array op.
显示 更早的评论
Hi, im trying to do image noise redution using various low pass filter but i'm getting this error for most of the images i load. This error does not come when i use the cameraman.tif image and the coins.png image
This is the error:
Array dimensions must match for binary array op.
Error in Lowpassfull>gaussianLPFilter (line 81)
C=L.*Hi;
Error in Lowpassfull (line 23)
C=gaussianLPFilter(L,rows,columns);
THIS THE CODE:
clc;
clear;
close all;
im=im2double(imread('noisy.jpg')); % convert int double
im = imresize(im,[256,256]);
im = imnoise(im,'gaussian', 0.1);
subplot(3,3,1);
imshow(im);
title('original image');
fftImage=fft2(im);
Y = fftshift(fftImage);
subplot(3,3,2);
imshow(real(log(Y)), []);
title('In Frequency Domain');
[rows columns] = size(Y);
L=Y;
B=idealLPFilter(L,rows,columns);
C=gaussianLPFilter(L,rows,columns);
D=butterworthLPFilter(L,rows,columns);
subplot(3,3,3);
imshow(real(log(B)), [])
title('Ideal Low Pass Filter(Frequency Domain)');
subplot(3,3,4);
imshow(log(abs(C)),[]);
title('Gaussian Low Pass Filter(Frequency Domain)');
subplot(3,3,5);
imshow(log(abs(D)), []);
title('Butterworth Low Pass Filter(Frequency Domain)');
filteredImage = real(ifft2(ifftshift(B)));
subplot(3,3,6);
imshow(real(filteredImage), []);
title('Output: Ideal Low Pass Filter');
GfilteredImage = real(ifft2(ifftshift(C)));
subplot(3,3,7);
imshow(real(GfilteredImage), []);
title('Output: Gaussain Low Pass Filter');
BfilteredImage = real(ifft2(ifftshift(D)));
subplot(3,3,8);
imshow(real(BfilteredImage), []);
title('Output: Butterworth Low Pass Filter');
err = immse(real(BfilteredImage), im);
fprintf('\n The mean-squared error is %0.4f\n', err);
function B = idealLPFilter(L,rows,columns)
window = 100;
B=L;
B(1:end, 1:window) = 0;%top left
B(1:window,1:end) = 0;
B(1:end, end-window:end) = 0; %top right
B(end-window:end, 1:end) = 0;%down right
end
function C = gaussianLPFilter(L,rows,columns)
R=20; %Filter size parameter
X=0:columns-1;
Y=0:rows-1;
[X Y]=meshgrid(X,Y);
Cx=0.5*columns;
Cy=0.5*rows;
Hi = exp(-((X-Cx).^2+(Y-Cy).^2)./(2*R).^2);
C=L.*Hi;
end
function D = butterworthLPFilter(L,rows,columns)
n=1;
D0=20;
[p q]=meshgrid(-floor(columns/2):floor(columns/2)-1,-floor(rows/2):floor(rows/2)-1);
D = sqrt(p.^2 + q.^2);
hhp = 1 ./ (1 + ((D ./ D0).^(2 * n)));
size(L)
size(hhp)
D=L.*hhp;
end
采纳的回答
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Computer Vision with Simulink 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!