Deblurring an Image using inverse filtering

Illustration
sid101 - 2022-02-12T11:07:51+00:00
Question: Deblurring an Image using inverse filtering

I am trying to deblur an image using inverse filtering that was blurred using a 25x25 gaussian blur function with sigma = 15. I am extracting the blurred image from a .mat file, displaying it which works correctly.   Next I define my gaussian filter and then compute frequency reponse of the filter. To deblur the image, I divide blurred image by frequency response of the filter and take ifft.   The blurred image displays correctly in figure 1, but figure 2 which should display deblurred image displays all purple. I am trying to keep my code as simple and minimal as possible.   What I am doing wrong here? I will appreciate any hints or inputs   images = load('project_images.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(m_blur)./hf); %inverse filter figure(2) imagesc(m_deblur) % Display deblurred image  

Expert Answer

Profile picture of Prashant Kumar Prashant Kumar answered . 2025-11-20

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

 


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!