ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering...

29
Εργαστήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώστας Μαριάς 3/4/2017

Transcript of ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering...

Page 1: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Εργαστήριο ADICVFourier transform, frequency domain filtering and image

restoration

Κώστας Μαριάς

3/4/2017

Page 2: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Fourier Filtering

ADICV Kostas Marias TEI Crete 2017 2

Page 3: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

ΠΑΡΑΔΕΙΓΜΑΤΑ ΦΙΛΤΡΩΝ

• ΔΙΑΚΡΙΤΟΣ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ FOURIER

• ΕΠΕΞΕΡΓΑΣΊΑ ΣΤΟ ΠΕΔΙΟ ΣΥΧΝΟΤΗΤΩΝ

Basic Matlab

Page 4: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Οπτικοποίηση ΔΜF με Matlab

1) Ο ΔΜF είναι πίνακας μιγαδικών οπότε απεικονίζουμε το μέτρο του με την εντολή abs της matlab.

2) Ο συντελεστής DC (άθροισμα όλων) έχει τεράστια τιμή σε σχέση με τις υπόλοιπες του ΔΜF. Συνήθως κάνουμε πρώτα την μετατόπιση που περιγράψαμε πριν.

3) Για να οπτικοποιήσουμε ένα ΔΜF στη Matlab ο ποιο συνηθισμένος τρόπος είναι να πάρουμε πρώτα το λογάριθμο του ΔΜF και στη συνέχεια να γίνει οτπικοποίηση.

4) Επειδή θα έχουμε πολύ υψηλές τιμές θα χρησιμοποιήσουμε την εντολή mat2gray για να τις φέρουμε από 0 έως 1.

5) Στην επόμενη διαφάνεια δίνεται παράδειγμα σε matab

Page 5: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

5Kostas Marias Digital Image Processing Lectures

Παράδειγμα: Οπτικοποίηση ΔΜF με Matlab

c=imread('cameraman.tif');

cf1=fft2(c);

cf=fftshift(fft2(c));

cfnormal1=mat2gray(log(1+abs(cf1)));

cfnormal=mat2gray(log(1+abs(cf)));

subplot(1,3,1), imshow(c), title('Original Image');

subplot(1,3,2), imshow(cfnormal1), title('DFT Image');

subplot(1,3,3), imshow(cfnormal), title('DFT Image shifted');

Matlab

fft2: Μας δίνει τον ΔΜF ενός πίνακα

fftshift: Μετασχηματίζει τον ΔΜΦ ώστε ο DC

συντελεστής να είναι στο κέντρο της εικόνας

1) Ο ΔΜF είναι πίνακας μιγαδικών οπότε

απεικονίζουμε το μέτρο του με την εντολή

abs της matlab.

2) Ο συντελεστής DC (άθροισμα όλων) έχει

τεράστια τιμή σε σχέση με τις υπόλοιπες

του ΔΜF. Συνήθως κάνουμε πρώτα την

μετατόπιση που περιγράψαμε πριν.

3) Για να οπτικοποιήσουμε ένα ΔΜF στη

Matlab ο ποιο συνηθισμένος τρόπος είναι

να πάρουμε πρώτα το λογάριθμο του ΔΜF

και στη συνέχεια να γίνει οτπικοποίηση.

4) Επειδή θα έχουμε πολύ υψηλές τιμές θα

χρησιμοποιήσουμε την εντολή mat2gray

για να τις φέρουμε από 0 έως 1.

Page 6: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

◊ Το ιδεατό χαμηλοπερατό φίλτρο (IDLPF) έχει συνάρτηση μεταφοράς Η

(μετασχηματισμό Fourier της μάσκας h) της μορφής:

Όπου D(u,v) είναι η απόσταση του σημείου με συχνότητες (u,v) από το

σημείο (0,0), και D0 είναι ένας θετικός αριθμός (συχνά αναφέρεται ως ακτίνα

του χαμηλοπερατού φίλτρου)

0

0

),( ,0

),( ,1

),(

DvuD

DvuD

vuH

Η επιλογή της τιμής του D0 στο ιδεατό

χαμηλοπερατό φίλτρο καθορίζει πόση από

τη συνολική ισχύ της εικόνας θέλουμε να

διατηρήσουμε!!

ΔΜF: Χαμηλοπερατά Φίλτρα-Ιδεατό

“Digital Image Processing”, Rafael C.Gonzalez & Richard E. Woods, Addison-Wesley, 3rd edition

Page 7: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

ΔΜF: Χαμηλοπερατά Φίλτρα-ΙδεατόΓια να φιλτράρουμε στο πεδίο συχνοτήτων πρώτα δημιουργούμε μια σφαίρα στο κέντρο της εικόνας, η οποία ανάλογα με την ακτίνα της μπορεί να κρατήσει συγκεκριμένες συχνότητες:

[x,y]=meshgrid(-128:127,-128:127);

z=sqrt(x.^2+y.^2);

c=(z<15); figure, imshow(c)

Matlab

I=imread('cameraman.tif');F=fftshift(fft2(I));

Στη συνέχεια διαβάζουμε την εικόνα

cameraman.tif στη matlab και

υπολογίζουμε τον ΔΜF της εικόνας I με

την εντολή fft2 της matlab. Επιπλέον

εφαρμόζουμε την εντολή fftshift για να

έχουμε στο κέντρο τον DC συντελεστή

Στη συνέχεια πολλαπλασιάζουμε τη κυκλική μάσκα c ακτίνας 15 pixel με τον

F έτσι ώστε να κρατήσουμε χαμηλές συχνότητες στο κέντρο του F:

cF=F.*c;

figure, imshow(mat2gray(log(1+abs(cF))));

Page 8: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

ΔΜF: Χαμηλοπερατά Φίλτρα-Ιδεατό

Τέλος υπολογίζουμε τον διακριτό, αντίστροφο μετασχηματισμό F της cF, δηλαδή της εικόνας με τις φιλτραρισμένες συχνότητες με την εντολή ifft2 της matlab:

IcF=ifft2(cF);

Επειδή η εικόνα που προκύπτει έχει max(max(IcF))=235.3163 και min(min(IcF)) = -233.8695, αλλά και για δώσουμε μια καλύτερη οπτικοποίηση (η αλληλουχία fft2 και ifft2 οδηγεί σε σφάλματα), επιλέγω να πάρω πρώτα τις απόλυτες τιμές της IcF (αν και είμαστε πίσω στο χωρικό πεδίο) και μετά να χρησιμοποιήσω το mat2gray της matlab για να μετασχηματιστούν όλες οι τιμές από 0 εως1 και στη συνέχεια να οπτικοποιηθούν:

figure, imshow(mat2gray(abs(IcF)))

Με την εντολή subplot δείχνουμε όλα τα βήματα-αποτελέσματα του χαμηλοπερατούφιλτραρίσματος με ΔΜF:

subplot(2,2,1);imshow(I,[]), title('Original Image');

subplot(2,2,2);imshow(mat2gray(log(1+abs(F)))), title('DFT of Image');

subplot(2,2,3);imshow(mat2gray(log(1+abs(cF)))), title('Lowpass mask');

subplot(2,2,4); imshow(mat2gray(abs(IcF))), title('Filtered Image');

Matlab

Page 9: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

ΔΜF: Χαμηλοπερατά Φίλτρα-Ιδεατό Matlab

Page 10: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

ΔΜF: Χαμηλοπερατά Φίλτρα

• Οι συναρτήσεις της matlab fft2 kai ifft2 δίνουν αριθμητικές προσεγγίσεις και περιχέουν, αναπόφευκτα, σφάλματα. Για αυτό το λόγο μετά από τον αντίστροφο ΔΜF χρησιμοποιούμε το imshow στις απόλυτες τιμές του πίνακα (abs) επιδιώκοντας να στρογγυλέψουμε σφάλματα που προκύπτουν κατά τον μετασχηματισμό και την αντιστροφή του.

• Στο ιδεατό φίλτρο υπάρχουν σφάλματα (με τη μορφή δαχτυλιδιού) από το κέντρο της φιλτραρισμένης εικόνας και προς τα έξω. Αυτά οφείλονται στην απόκριση του ιδεατού φίλτρου λόγω των απότομων ακμών του:

[x,y]=meshgrid(-128:127,-128:127);

z=sqrt(x.^2+y.^2);

c=(z<15);

cf=fftshift(fft2(c));

imshow(mat2gray(log(1+abs(cf))))

b=1./(1+(z./15).^2);

figure, imshow(b)

cf=fftshift(fft2(b));

imshow(mat2gray(log(1+abs(cf))))

Matlab

Το πρόβλημα λύνεται με τη χρήση

φίλτρων Butterworth που έχουν

ομαλή μετάβαση εντάσεων στην

περιφέρεια του κύκλου.

Page 11: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

◊ Τα ιδεατά χαμηλοπερατά φίλτρα δεν είναι υλοποιήσιμα σε hardware. Επιπλέον

δημιουργούν εικόνες με ‘δακτυλίδια’ (ringing effect) εξαιτίας της απότομης

μεταβολής μεταβολής της Hideal από την τιμή 1 στη τιμή 0.

◊ Τα χαμηλοπερατά φίλτρα Butterworth (BLPF) έχουν συνάρτηση μεταφοράς Η της

μορφής (n είναι η τάξη του φίλτρου):n

D

vuDvuH

2

0

),(1

1),(

ΔΜF: Χαμηλοπερατά φίλτρα Butterworth

“Digital Image Processing”, Rafael C.Gonzalez & Richard E. Woods, Addison-Wesley, 3rd edition

Matlab

Page 12: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

ΔΜF: Χαμηλοπερατά φίλτρα Butterworth n=1

[x,y]=meshgrid(-128:127,-128:127);

c1=1./(1+((x.^2+y.^2)/15^2));

c2=1./(1+((x.^2+y.^2)/35^2));

I=imread('cameraman.tif');

F=fftshift(fft2(I));

cF1=F.*c1; cF2=F.*c2;

IcF1=ifft2(cF1); IcF2=ifft2(cF2);

subplot(2,4,1);imshow(I,[]), title('Original Image');

subplot(2,4,2);imshow(mat2gray(log(1+abs(F)))), title('DFT of Image');

subplot(2,4,3);imshow(mat2gray(log(1+abs(cF1)))), title('Lowpass mask cutoff 15');

subplot(2,4,4);imshow(mat2gray(log(1+abs(cF2)))), title('Lowpass mask cutoff 35');

subplot(2,4,6);imshow(mat2gray(abs(IcF1))), title('Filtered with mask LP15');

subplot(2,4,7);imshow(mat2gray(abs(IcF2))), title('Filtered with mask LP 35');Matlab

Page 13: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Άσκηση ΔΜF: Χαμηλοπερατά φίλτρα Butterworth n=1%Διαβάστε την εικόνα

A=imread('kids.tif');

%Εξισορροπείστε το ιστόγραμμα της εικόνας Α δημιουργώντας μια εικόνα Β

I=histeq(A);

[m n]=size(I)

%Φτιάξτε 3 φίλτρα Butterworth με cutoff 45, το 1ο με n=1, το 2ο με n=2, το 3ο με n=3

[x,y]=meshgrid(-n/2:n/2-1,-m/2:m/2-1);

c1=1./(1+((x.^2+y.^2)/45^2));

c2=1./(1+((x.^2+y.^2).^2/45^4));

c3=1./(1+((x.^2+y.^2).^3/45^6));

%Φιλτράρετε με αυτά τα 3 φίλτρα στο πεδίο συχνοτήτων της Ι

F=fftshift(fft2(I));

cF1=F.*c1; cF2=F.*c2; cF3=F.*c3;

IcF1=ifft2(cF1); IcF2=ifft2(cF2); IcF3=ifft2(cF3);

Matlab

n

D

vuDvuH

2

0

),(1

1),(

Page 14: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Άσκηση ΔΜF: Χαμηλοπερατά φίλτρα Butterworth n=1

%Οπτικοποίηση Αποτελεσμάτων

subplot(2,4,1);imshow(A), title('Original Image');

subplot(2,4,2); imshow(I); title('Hist Equalised Image');

%subplot(2,4,3);imshow(mat2gray(log(1+abs(F)))), title('DFT of HE Image');

subplot(2,4,3);imshow(mat2gray(log(1+abs(cF1)))), title('Lowpass mask cutoff n=1');

subplot(2,4,4);imshow(mat2gray(log(1+abs(cF2)))), title('Lowpass mask cutoff n=2');

subplot(2,4,5);imshow(mat2gray(log(1+abs(cF3)))), title('Lowpass mask cutoff n=3');

subplot(2,4,6);imshow(mat2gray(abs(IcF1))), title('Filtered with mask n=1');

subplot(2,4,7);imshow(mat2gray(abs(IcF2))), title('Filtered with mask n=2');

subplot(2,4,8);imshow(mat2gray(abs(IcF2))), title('Filtered with mask n=3');

ΠΡΑΤΗΡΗΣΕΙΣ????

Page 15: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017
Page 16: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Άσκηση ΔΜF: Χαμηλοπερατά φίλτρα Butterworth n=1

Παρατηρείστε μεταβολές στα ιστογράμματα

I1=uint8(255*mat2gray(abs(IcF1)));

figure, imhist(I1)

I2=uint8(255*mat2gray(abs(IcF2)));

figure, imhist(I2)

I3=uint8(255*mat2gray(abs(IcF3)));

figure, imhist(I2)

Page 17: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Fourier Image

Restoration

ADICV Kostas Marias TEI Crete 2017 17

Page 18: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Σκοπός Εργαστηρίου

• Αποκατάσταση εικόνας

• Αφαιρώντας Περιοδικό Θόρυβο στο πεδίο συχνοτήτων

Basic Matlab

Page 19: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Αφαιρώντας Περιοδικό Θόρυβο στο πεδίο συχνοτήτων

%Μπορούμε εύκολα να δημιουργήσουμε περιοδικό θόρυβο από την επικάλυψη %μιας εικόνας με μια τριγωνομετρική συνάρτηση:

cm=imread('cameraman.tif');

%Η δεύτερη γραμμή απλά δημιουργεί ένα ημιτονοειδές σήμα και ρυθμίζει την τιμή %του να είναι στο εύρος 0-2

[x,y]=meshgrid(1:256,1:256);

s=1+sin(x+y/1.5);

figure, surf(s), shading interp, colormap bone

%Με την επόμενη γραμμή προσθέτουμε στην εικόνα το ημιτονικό σήμα και %διαιρούμε με 4 ώστε να έχουμε πινακα double με εύρος 0.0-1.0

cp=(double(cm)/128+s)/4;

cpf=fftshift(fft2(cp));

subplot(1,3,1), imshow(cm)

subplot(1,3,2), imshow(cp)

subplot(1,3,3), imshow(mat2gray(log(1+abs(cpf))))

An Introduction to Digital Image Processing with Matlab, Alasdair McAndrew

Page 20: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Αφαιρώντας Περιοδικό Θόρυβο στο πεδίο συχνοτήτων

Οι επιπλέον δύο αιχμές μακριά από το κέντρο αντιστοιχεί στο θόρυβο που μόλις προσθέσαμε. Μικρές περίοδοι ημιτόνων

αντιστοιχούν σε υψηλής συχνότητας παρεμβολές (μεγάλη αλλαγή σε μια μικρή απόσταση), και είναι ως εκ τούτου πιο μακριά

από το κέντρο του μετατοπίστηκε μετασχηματισμό.

figure, imshow(mat2gray(log(1+abs(cpf))))

Θα αφαιρέσουμε τώρα αυτές τις επιπλέον αιχμές, και μετά θα αντιστρέψουμε στο χωρικό πεδίο.

Αυτό γίνεται διαδραστικά γράφοντας στη matlab:

impixelinfo;

Πηγαίνουμε τον κέρσορα πάνω στις αιχμές κάνουμε δεξί κλίκ και παίρνουμε τις συντεταγμένες:

(156,170) και (102,88) και οι δύο έχουν απόσταση ~ 49 από το κέντρο.

[m n]=size(cp);

[x,y]=meshgrid(-n/2:n/2-1,-m/2:m/2-1); z=sqrt(x.^2+y.^2);

z(170,156)

ans =

49.0918

Με βάση αυτό φτιάχνουμε (επόμενη διαφάνεια) το Band reject filter.

Η αρχική εικόνα (αριστερά), η εικόνα με περιοδικό θόρυβο και ο αντίστοιχος ΔΜF (δεξιά)

An Introduction to Digital Image Processing with Matlab, Alasdair McAndrew

Page 21: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Αφαιρώντας Περιοδικό Θόρυβο στο πεδίο συχνοτήτων%Band reject filtering. Δημιουργούμε ένα φίλτρο που %αποτελείται από αυτά με ένα δαχτυλίδι από μηδενικά %που βρίσκονται σε μια ακτίνα 49 από το κέντρο:

br=(z < 47 | z > 51); figure,imshow(br)

%όπου το z είναι η μήτρα που αποτελείται από %αποστάσεις από το κέντρο. Αυτό το συγκεκριμένο %δαχτυλίδι θα έχει ένα πάχος αρκετά μεγάλο για να %καλύψει τις αιχμές. Στη συνέχεια, όπως και πριν, το %πολλαπλασιάζουμε με τον ΔΜF:

cpfbr=cpf.*br;

figure, imshow(mat2gray(log(1+abs(cpfbr))))

An Introduction to Digital Image Processing with Matlab, Alasdair McAndrew

Page 22: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Αφαιρώντας Περιοδικό Θόρυβο στο πεδίο συχνοτήτων%Οπτικοποίηση τελικών αποτελεσμάτων

cpfbr=cpf.*br; IF=ifft2(cpfbr);

subplot(1,4,1), imshow(cm), title('Original')

subplot(1,4,2), imshow(cp), title('Original with periodic noise')

subplot(1,4,3), imshow(mat2gray(log(1+abs(cpf)))), title('Fourier Filter')

subplot(1,4,4), imshow(mat2gray(abs(IF))), title('Filtered Image')

Page 23: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Αφαιρώντας Περιοδικό Θόρυβο στο πεδίο συχνοτήτων

cm=imread('cameraman.tif');

[x,y]=meshgrid(1:256,1:256);

s=1+sin(4*x+y/3);

cp=(double(cm)/128+s)/4; cpf=fftshift(fft2(cp));

[m n]=size(cp);

[x,y]=meshgrid(-n/2:n/2-1,-m/2:m/2-1); z=sqrt(x.^2+y.^2);

br=(z < 80); figure,imshow(br)

cpfbr=cpf.*br;

cpfbr=cpf.*br; IF=ifft2(cpfbr);

%subplot(1,4,1), imshow(cm), title('Original')

subplot(1,4,1), imshow(cp,[]), title('Original with periodic noise')

subplot(1,4,2), imshow(mat2gray(log(1+abs(cpf)))), title('Fourier Filter')

subplot(1,4,3), imshow(mat2gray(log(1+abs(cpfbr)))), title('Fourier cut')

subplot(1,4,4), imshow(mat2gray(abs(IF))), title('Filtered Image')

Page 24: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Σκοπός εργαστηρίου

• Με βάση τον κώδικα που αναλύθηκε (δίνεται στο camerarestore.m) και τις εικόνες text.bmp και moonlanding.png:

• Να αποκαταστήσετε την εικόνα text.bmp ώστε να φαίνονται καλύτερα τα γράμματα.

• Να αποκαταστήσετε την εικόνα text.bmp ώστε να φαίνεται καλύτερα το περιεχόμενο της εικόνας. Χρησιμοποιήστε επιπλέον Butterworth φίλτρα.

Page 25: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Restore εικόνα text.bmp

cp=imread('text.bmp'); cpf=fftshift(fft2(cp(:,:,1)));

[m n]=size(cp(:,:,1));

[x,y]=meshgrid(-n/2:n/2-1,-m/2:m/2-1); z=sqrt(x.^2+y.^2);

br=(z > 150); figure,imshow(br)

cpfbr=cpf.*br;

cpfbr=cpf.*br; IF=ifft2(cpfbr);

subplot(1,4,1), imshow(cp,[]), title('Original with periodic noise')

subplot(1,4,2), imshow(mat2gray(log(1+abs(cpf)))), title('Fourier Filter')

subplot(1,4,3), imshow(mat2gray(log(1+abs(cpfbr)))), title('Fourier cut')

subplot(1,4,4), imshow(mat2gray(abs(IF))), title('Filtered Image')

figure, imshow(histeq(mat2gray(abs(IF)))), title('Filtered Image')

Page 26: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Restore moonlanding.png

cp=imread('moonlanding.png');cpf=fftshift(fft2(cp));

[m n]=size(cp);

[x,y]=meshgrid(-n/2:n/2-1,-m/2:m/2-1); z=sqrt(x.^2+y.^2);

br=(z <130); figure,imshow(br)

cpfbr=cpf.*br;

cpfbr=cpf.*br; IF=ifft2(cpfbr);

subplot(1,4,1), imshow(cp,[]), title('Original with periodic noise')

subplot(1,4,2), imshow(mat2gray(log(1+abs(cpf)))), title('Fourier Filter')

subplot(1,4,3), imshow(mat2gray(log(1+abs(cpfbr)))), title('Fourier cut')

subplot(1,4,4), imshow(mat2gray(abs(IF))), title('Filtered Image')

%z(363,257)=138

Page 27: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Restore moonlanding.png

cp=imread('moonlanding.png');cpf=fftshift(fft2(cp));

[m n]=size(cp);

[x,y]=meshgrid(-n/2:n/2-1,-m/2:m/2-1); c3=1./(1+((x.^2+y.^2).^3/50^6));

br=c3; figure,imshow(br)

cpfbr=cpf.*br;

cpfbr=cpf.*br; IF=ifft2(cpfbr);

subplot(1,4,1), imshow(cp,[]), title('Original with periodic noise')

subplot(1,4,2), imshow(mat2gray(log(1+abs(cpf)))), title('Fourier Filter')

subplot(1,4,3), imshow(mat2gray(log(1+abs(cpfbr)))), title('Fourier cut')

subplot(1,4,4), imshow(mat2gray(abs(IF))), title('Filtered Image')

%z(363,257)=138

Page 28: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Restore moonlanding.png

cp=imread('moonlanding.png');cpf=fftshift(fft2(cp));

[m n]=size(cp);

[x,y]=meshgrid(-n/2:n/2-1,-m/2:m/2-1); z=sqrt(x.^2+y.^2);

br=(z <40 |z>300); figure,imshow(br)

cpfbr=cpf.*br;

cpfbr=cpf.*br; IF=ifft2(cpfbr);

subplot(1,4,1), imshow(cp,[]), title('Original with periodic noise')

subplot(1,4,2), imshow(mat2gray(log(1+abs(cpf)))), title('Fourier Filter')

subplot(1,4,3), imshow(mat2gray(log(1+abs(cpfbr)))), title('Fourier cut')

subplot(1,4,4), imshow(mat2gray(abs(IF))), title('Filtered Image')

%z(363,257)=138

Page 29: ργασʒήριο ADICV · ργασʒήριο ADICV Fourier transform, frequency domain filtering and image restoration Κώσʐας Μαριάς 3/4/2017

Thank you for your attention!