2 views (last 30 days)

i = imread('peppers.png');

red = i(:,:,1);

green = i(:,:,2);

blue = i(:,:,3);

subplot(4,2,1);imshow(i);title('original image');

subplot(4,2,2);imshow(red);title('red');

subplot(4,2,3);imshow(green);title('green');

subplot(4,2,4);imshow(blue);title('blue');

A = cat(3,red,green,blue);

subplot(4,2,5);imshow(A);title('Combined again');

Fi=fftshift(double(A));

[m,n]=size(A);

[x,y]=meshgrid(1:n,1:m);

x=x-(n+1)/2;

y=y-(m+1)/2;

d=sqrt(x.^2+y.^2);

d0=30;

ghpf=1-exp(-d.^2/(2*d0.^2));

j=ifft2(fftshift(Fi.*ghpf));

subplot(4,2,6);imshow(j);title('new');

the output here is :

??? Matrix dimensions must agree.

Error in ==> testRgb at 27

j=ifft2(fftshift(Fi.*ghpf));

Image Analyst
on 9 Aug 2020

Never do this with an image:

[m,n]=size(A);

Why not? Because if A is RGB, which yours is, then your n is the number of columns times the number of color channels. So it's basically 3 times the number of columns, not the number of columns like you thought.

See Steve's blog: http://blogs.mathworks.com/steve/2011/03/22/too-much-information-about-the-size-function/

Do this instead:

[rows, columns, numberOfColorChannels] = size(A);

I'm also begging you to not have your code look like an alphabet soup mess of a program. Use descriptive variable names (not single letters), and add lots of comments. I would not hire a person who wrote code that doesn't follow those two requirements of good programming.

Sulaymon Eshkabilov
on 9 Aug 2020

Hi,

There is two small but crucial errs - see the command below:

%...

Fi=fftshift(double(A)); % NOTE your assigned variable name

[m, n, ooo]=size(A); % 1st ERR => NB: size of A is 225-by-225-by-3. Thus, you'd need the 3rd output as well

[x,y]=meshgrid(1:m,1:n);

x=x-(n+1)/2;

y=y-(m+1)/2;

d=sqrt(x.^2+y.^2);

d0=30;

ghpf=1-exp(-d.^2/(2*d0.^2));

% j=ifft2(fftshift(fi.*ghpf)); % 2nd ERR: Need to be Fi instead of fi

j=ifft2(fftshift(Fi.*ghpf));

subplot(4,2,6);imshow(j);title('new');

Good luck

Sulaymon Eshkabilov
on 9 Aug 2020

You have another typo:

[x,y,]=meshgrid(1:n,1:m); must be

[x,y]=meshgrid(1:n,1:m);

Opportunities for recent engineering grads.

Apply TodayFind the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
## 2 Comments

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/577303-what-is-wrong-here-error-using-times-matrix-dimensions-must-agree#comment_965872

⋮## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/577303-what-is-wrong-here-error-using-times-matrix-dimensions-must-agree#comment_965872

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/577303-what-is-wrong-here-error-using-times-matrix-dimensions-must-agree#comment_965884

⋮## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/577303-what-is-wrong-here-error-using-times-matrix-dimensions-must-agree#comment_965884

Sign in to comment.