what is the wrong in this code?
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Ahmed Grera
il 5 Set 2017
Commentato: Ahmed Grera
il 6 Set 2017
clc
clear all
close all
lena = imread('eight.tif');
A = fftshift(fft2(lena));
S = imnoise(lena,'Gaussian',0,1);
size(S)
% define spatial filters
h_gauss= fspecial('gaussian', 15, 1.0);
% results after spatial filtering
lena_h_gauss = imfilter(S, h_gauss, 'replicate');
% fourier transformed filters
H_gauss = fftshift(fft2(lena_h_gauss));
size(H_gauss)
% filtering in frequency domain
Lena_H_gauss = S .* H_gauss;
lena_H_gauss = ifft2(ifftshift(Lena_H_gauss));
% print results
subplot(3,3,1); imshow(lena); title('Original Image');
subplot(3,3,2); imshow(lena_h_gauss); title('Gauss-Filtered Image');
subplot(3,3,3); imshow(real(log(Lena)), []); title('FT (Original Image)');
subplot(3,3,4); imshow(real(log(H_gauss)), []); title('FT (Gauss Filter)');
subplot(3,3,5); imshow(lena_H_gauss); title('Result FT Gauss');
0 Commenti
Risposta accettata
Image Analyst
il 5 Set 2017
S is complex and imfilter() doesn't work on complex images. You might have to work on the real and imaginary images one at a time.
0 Commenti
Più risposte (1)
John BG
il 6 Set 2017
Modificato: John BG
il 6 Set 2017
Hi Ahmed
1.
it may be that rather than real an imaginary parts, you may consider using the module, with abs
instead of
Lena_H_gauss = S .* H_gauss;
use
lena_H_gauss = S .* uint64(abs(H_gauss));
2.
there are
lena_h_gauss
and
Lena_h_gauss
probably only one should be used
3.
also, instead of
subplot(3,3,1); imshow(lena); title('Original Image');
subplot(3,3,2); imshow(lena_h_gauss); title('Gauss-Filtered Image');
subplot(3,3,3); imshow(real(log(Lena)), []); title('FT (Original Image)');
subplot(3,3,4); imshow(real(log(H_gauss)), []); title('FT (Gauss Filter)');
subplot(3,3,5); imshow(lena_H_gauss); title('Result FT Gauss');
use
subplot(3,3,1); imshow(lena); title('Original Image');
subplot(3,3,2); imshow(lena_h_gauss); title('Gauss-Filtered Image');
subplot(3,3,3); imshow(real(log(double(lena))), []); title('FT (Original Image)');
subplot(3,3,4); imshow(real(log(double(H_gauss))), []); title('FT (Gauss Filter)');
subplot(3,3,5); imshow(lena_H_gauss); title('Result FT Gauss');
.
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
Vedere anche
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!