Array dimensions must match for binary array op.
Show older comments
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
Accepted Answer
More Answers (0)
Categories
Find more on Computer Vision with Simulink in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!