When I take an image and do fft on it in Matlab it produces a complex matrix. If I take the ifft of that image, it produces a double array. When doing the ifft, does matlab discard the imaginary component of the image, if any?
MATLAB: Inverse fourier transform Imginary Components
complex numbersfourier domain
Related Solutions
A bit of data exploration shows that you have quite an outlier in your image:
figure(3),clf(3)histogram(m_deblur)set(gca,'YScale','log')axis([-10 140 0.1 max(ylim)])
Once you replace that with a 0, the automatic scaling should work as expected again. In the code below I went a bit further and set the caxis value manually to something that felt about right.
figure(2)imagesc(m_deblur) % Display deblurred image
caxis([-0.15 0.15])
So in conlusion: this image is not ready yet.
The reason for this is that you didn't put the blurred image in the Fourier domain yet, so the division doesn't make a lot of sense.
images = load('mandrill_blurred.mat'); % Load the mat file containing images
m_blur = images.mandrill_blurred; % Extract the first image
imagesc(m_blur); % display the blurred image
h = fspecial('gaussian',[25 25],15); % 25x25 Gaussian blur function with sigma = 15
hf = fft2(h,size(m_blur,1),size(m_blur,2)); m_deblur = real(ifft2(fft2(m_blur)./hf)); %inverse filter
% ^^^^^ ^ ^
% you forgot this
figure(2)imagesc(m_deblur) % Display deblurred image
The FFT function will return a complex double array. If you read in a .JPG or a .TIF file, you will notice that they are UINT8 arrays. So, you will have to take the real part of the IFFT and then convert it back into UINT8. Try the example below:
IM=imread('flowers.tif'); % Read in a image
whosimage(IM); % Display image
FF = fft(IM); % Take FFT
whosIFF = ifft(FF); % take IFFT
whosFINAL_IM = uint8(real(IFF)); % Take real part and convert back to UINT8
whosfigureimshow(FINAL_IM) % Get back original image.
The WHOS calls in the above code will output the stored variable information so you can see where the conversion to UINT8 is taking place.
Best Answer