Error using .* Array dimensions must match for binary array op. Error in uas1 (line 7) If_low = If.*c;
9 views (last 30 days)
Show older comments
I = imread ('gray.jpg');
If=fft2(I);
If=fftshift(If);
[x,y] = meshgrid(1:1, 1:1)
z = sqrt(x.^2 + y.^2)
c = (z<3)
If_low = If.*c;
If_low_inv = ifft2(If_low);
subplot (2,2,1), imshow(I), title ('foto asli')
subplot (2,2,2), fftshow(If), title ('foto transformasi fourier')
subplot (2,2,3), imshow(c), title ('low passfilter')
subplot (2,2,4), fftshow(If_low_inv, 'abs'), title ('filtering')
3 Comments
Dyuman Joshi
on 7 Jan 2024
Clearly, the dimensions of If and c are not compatible for element-wise multiplication.
However, since you have not described what you are trying to do, we can't provide a definitive suggestion to help solve this issue.
A general solution is to make sure that the variables are compatible for element-wise multiplication.
Answers (1)
Hassaan
on 7 Jan 2024
I = imread('gray.jpg');
% Make sure the input image is grayscale
if size(I, 3) == 3
I = rgb2gray(I);
end
% Convert image to double for FFT
I_double = im2double(I);
% Apply 2D FFT and shift zero frequency component to the center
If = fft2(I_double);
If_shifted = fftshift(If);
% Create a meshgrid for the frequency domain that matches the image size
[rows, cols] = size(I_double);
[x, y] = meshgrid(-cols/2:cols/2-1, -rows/2:rows/2-1);
z = sqrt(x.^2 + y.^2);
% Create a circular low-pass filter mask
cutoff = 30; % You may need to adjust the cutoff frequency
c = (z < cutoff);
% Apply the low-pass filter to the shifted frequency domain image
If_low = If_shifted .* c;
% Shift back and apply inverse FFT
If_low_unshifted = ifftshift(If_low);
If_low_inv = ifft2(If_low_unshifted);
% Display the results
subplot(2, 2, 1), imshow(I), title('Original Image');
subplot(2, 2, 2), imshow(log(1 + abs(If_shifted)), []), title('Fourier Transform');
subplot(2, 2, 3), imshow(c), title('Low Pass Filter');
subplot(2, 2, 4), imshow(abs(If_low_inv)), title('Filtered Image');
- The meshgrid is centered around zero and then shifted to match the centering performed by fftshift.
- The mask c is then also centered with ifftshift to match the FFT-shifted frequency array before applying the element-wise multiplication.
------------------------------------------------------------------------------------------------------------------------------------------------
If you find the solution helpful and it resolves your issue, it would be greatly appreciated if you could accept the answer. Also, leaving an upvote and a comment are also wonderful ways to provide feedback.
Professional Interests
- Technical Services and Consulting
- Embedded Systems | Firmware Developement | Simulations
- Electrical and Electronics Engineering
0 Comments
See Also
Categories
Find more on Read, Write, and Modify Image 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!