Hi Ahmed
I have applied some changes to your code but perhaps you would like to consider using a different filter.
attached test567.m
1.
reference image
clear all;clc
img = imread( ('eight.tif') ); % read image, use gray-level images here. figure(1);imshow(img);title('Original Image') % it's useful to mark references as early as possible
2.
really contaminated image
.
A = imnoise(img,'Gaussian',0,1); figure(2);imshow(A)title('Noisy Image')
.
.
IMG2 = fft2 ( img ); % Fourier of img sz = size( img )
G = fspecial('gaussian' ,[5,5]) % create a filter with std sigma same size as img %# Filter it h = imfilter(A,G,'same') H = fft2 ( h ) % Fourier of filter
F = IMG2.*H % filter in Fourier space f = ifft2( F ) % back to spatial domain. f=f-min(min(f)); f=f*255/max(max(f));
figure(3); imagesc(f);title('Gaussian filter in Frequency Domain')
.
Please note that min max values of the filter itself are really high, and the range between such min max is really narrow compared to the values of literally any pixel of the filter.
You may want a higher range.
.
figure(6); imshow(uint8(f)) % Calculate MSE, mean square error.
.
.
Mean_Square_Error =immse(img,f) Mean_Square_Error = 1.8836e+04
apparently command immse suggested by Image Analyst yields an error assessment way larger than applying Ahmed's error formula.
either im2double() on unit8 type or the other way round, or uint8() on double type both ways get to same error figure.
[M N] = size(img) M = 242 N = 308 Mean_Square_Error2 = sum(sum(error0 .* error0)) / (M * N) Mean_Square_Error2 = 208.7750 error02 = im2double(img) - f; Mean_Square_Error3 = sum(sum(error0 .* error0)) / (M * N) Mean_Square_Error3 = 208.7750
.
Ahmed
if you find this answer useful would you please be so kind to consider marking my answer as Accepted Answer?
To any other reader, if you find this answer useful please consider clicking on the thumbs-up vote link
thanks in advance
John BG