Εργαστήριο ADICV1 Image Boundary detection and filtering Κώστας Μαριάς 13/3/2017
Boundary Detection 2
Γείτονες και περίγραμμα εικόνας Ορίζουμε ως V το σύνολο των τιμών εντάσεων εικόνας για να ορίσουμε γειτνίαση. Στην δυαδική εικόνα (binary) V = {1} 3
Basic Βασικές σχέσεις ανάμεσα σε pixels Γείτονες του pixel p: 4-γείτονες Ν 4 (p) Είναι το σύνολο από τους Τέσσερεις οριζόντιους και κάθετους: (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1) (x - 1, y) (x, y - 1) (x,y) (x, y + 1) (x + 1, y) στήλες γραμμές
Basic Βασικές σχέσεις ανάμεσα σε pixels Γείτονες του pixel p: 4- διαγώνιοι γείτονες Ν D (p) Είναι το σύνολο από τους Τέσσερεις διαγώνιους: (x + 1, y + 1), (x + 1, y - 1), (x - 1, y + 1), (x - 1, y - 1) στήλες (x - 1, y - 1) (x - 1, y + 1) (x,y) (x + 1, y - 1) (x + 1, y + 1) γραμμές
Βασικές σχέσεις ανάμεσα σε pixels Basic Γείτονες του pixel p: 8-γείτονες N 8 (p)=n 4 (p)+ Ν D (p) στήλες (x - 1, y - 1) (x - 1, y) (x - 1, y + 1) (x, y - 1) (x,y) (x, y + 1) (x + 1, y - 1) (x + 1, y) (x + 1, y + 1) γραμμές Σε όλες τις περιπτώσεις αν το (x,y) είναι στο περίγραμμα της εικόνας οι γείτονες ενδέχεται να είναι έξω από την εικόνα!!!
Γειτνίαση, Συνδεσιμότητα, Περιοχές, και Όρια Έστω ότι μια εικόνα περιέχει K ξεχωριστές περιοχές R k, k=1..k. H ένωσή τους R u ορίζεται ως προσκήνιο-foreground. Η συμπληρωματική περιοχή {όλα όσα ΔΕΝ είναι στο R u δηλ. ανήκουν στο (R u ) c } είναι το φόντο-background της εικόνας. Το σύνορο ή περίγραμμα (boundary, border ή contour) μιας περιοχής R είναι το σύνολο των σημείων της περιοχής που γειτονεύουν με το συμπλήρωμα της περιοχής R. Σύνορο R = σύνολο pixels R που έχουν τουλάχιστον 1 γείτονα από το background.
Γειτνίαση, Συνδεσιμότητα, Περιοχές, και Όρια Σχετικά με το περίγραμμα πρέπει και πάλι να ορίσουμε αν αναφερόμαστε σε 4-,8-, m- γειτνίαση. Για να αποφύγουμε ασάφεια (βλέπε παρακάτω σχήμα) χρησιμοποιούμε 8- γειτνίαση/συνδεσιμότητα για σημεία μιας περιοχής και του background. Το pixel αυτό ΔΕΝ ανήκει στο περίγραμμα της περιοχής με τιμές 1 αν χρησιμοποιήσουμε 4- γειτνίαση με το φόντο!
Γειτνίαση, Συνδεσιμότητα, Περιοχές, και Όρια Ο προηγούμενος ορισμός είναι το εσωτερικό περίγραμμα σε αντίθεση με το εξωτερικό που είναι το αντίστοιχο του background. Αυτό είναι σημαντικό για ανάπτυξη αλγορίθμων που εντοπίζουν το περίγραμμα της εικόνας γιατί το περίγραμμα είναι πάντα ένα κλειστό μονοπάτι! 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 Το εσωτερικό περίγραμμα της περιοχής εικόνας με τιμές 1 είναι η ίδια περιοχή ΑΛΛΑ δεν είναι κλειστό μονοπάτι!!! Το εξωτερικό όμως είναι!!!
Δημιουργία εικόνας και εύρεση περιγράμματος A=zeros(100); A(30:50,30:50)=1; B=zeros(100); %Πως θα βρούμε το περίγραμμα? Ιδέες? for i=1:100 for j=1:100 if A(i,j)==1 & (A(i,j-1)==0 A(i,j+1)==0 A(i-1,j)==0 A(i+1,j)==0) B(i,j)=A(i,j); (i - 1, j) (i, j - 1) (i,j) (i, j + 1) (i + 1, j) 10
Δημιουργία εικόνας και εύρεση περιγράμματος %Ας φτιάξουμε ένα δεύτερο σχήμα που να ακουμπάει με το πρώτο. A(51:70,51:70)=1; figure, imshow(a) B=zeros(100); for i=1:100 for j=1:100 if A(i,j)==1 & (A(i,j-1)==0 A(i,j+1)==0 A(i-1,j)==0 A(i+1,j)==0) B(i,j)=A(i,j); 11
Φτιάχτε μια καινούρια εικόνα που να έχει 255 GreyLevel τιμή στα δύο τετράγωνα και 155 στο περίγραμμα. C=A*255-B*100; figure, imshow(uint8(c)) 12
Δημιουργία εικόνας και εύρεση περιγράμματος στο γράμμα B A=imread('B.gif'); figure, imshow(a) [rows,columns]=size(a); B=zeros(rows,columns); for i=1:rows for j=1:columns if A(i,j)==255 & (A(i,j-1)==0 A(i,j+1)==0 A(i-1,j)==0 A(i+1,j)==0) B(i,j)=A(i,j); figure, imshow(b) 13
Δημιουργία εικόνας και εύρεση περιγράμματος με 8-γείτονες B2=zeros(rows,columns); for i=1:rows for j=1:columns if A(i,j)==255 & (A(i,j-1)==0 A(i,j+1)==0 A(i-1,j)==0 A(i+1,j)==0 A(i-1,j-1)==0 A(i+1,j-1)==0 A(i- 1,j+1)==0 A(i+1,j+1)==0) B2(i,j)=A(i,j); figure, imshow(b2) %κατευθείαν μπορούμε να βρούμε τους διαγώνιους γείτονες 14
Δημιουργία εικόνας και εύρεση περιγράμματος με 8-γείτονες %κατευθείαν μπορούμε να βρούμε τους διαγώνιους γείτονες C=B2-B; figure, imshow(uint8(c)) %Πάνω στην εικόνα Α αναδείξτε το περίγραμμά της C2=A-uint8(B/2); figure, imshow(c2) 15
Boundary detection of trees.bmp Να βρεθεί το περίγραμμα της εικόνας trees.bmp κρατώντας μόνο τις τιμές του γκρίζου που είναι μεγαλύτερες του 70. [X,map] = imread('trees.bmp'); figure, imshow(x); figure, imshow(x>70); A=uint8((X>70)*255); figure, imshow(a); 16
Boundary detection of trees.bmp [rows,columns]=size(a); B=zeros(rows,columns); for i=2:rows-1 for j=2:columns-1 if A(i,j)==255 & (A(i,j-1)==0 A(i,j+1)==0 A(i-1,j)==0 A(i+1,j)==0) B(i,j)=A(i,j); figure, imshow(b) 17
Image Filtering 18
Matlab Παράδειγμα Επεξεργασίας Εικόνας Basic I = imread('eight.tif'); figure, imshow(i) filteredimage = conv2(double(ι), ones(3)/9); figure, imshow(uint8(filteredimage)); 1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9
ΦΙΛΤΡΟ ΜΕΣΗΣ ΤΙΜΗΣ παράδειγμα με Matlab Εφαρμογή φίλτρου mean 3x3 αφού η αρχική εικόνα επιμολυνθεί θόρυβο Gauss. Χρησιμοποιούμε στη Matlab τη συνάρτηση imfilter(i,h) όπου I και h είναι πολυδιάστατοι πίνακες της εικόνας εισόδου και του φίλτρου. Το 3X3 φίλτρο μέσης τιμής δεν ανταποκρίνεται όσο καλά όσο το 5x5 το οποίο απομακρύνει καλύτερα τον θόρυβο με κόστος όμως το περαιτέρω θόλωμα της εικόνας. E. Jebamalar Leavline, D. Asir Antony Gnana Singh, On Teaching Digital Image Processing with MATLAB, American Journal of Signal Processing, Vol. 4 No. 1, 2014, pp. 7-15. doi: 10.5923/j.ajsp.20140401.02. % Teaching gaussian noise removal using a simple 3X3 %average filter clc;clear all; close all; Im = imread('cameraman.tif');i = imnoise(im,'gaussian'); h1 = ones(3,3) / 9;h2 = ones(5,5) / 25; I1 = imfilter(i,h1);i2 = imfilter(i,h2); subplot(2,2,1);imshow(im,[ ]);title('original Image'); subplot(2,2,2);imshow(i,[ ]);title('image with Gaussian noise'); subplot(2,2,3);imshow(i1,[ ]); title('filtered Image with 3X3 average filter'); subplot(2,2,4);imshow(i2,[ ]); title('filtered Image with 5X5 average filter');
% Teaching gaussian noise removal using a simple 3X3 %average filter clc;clear all; close all; Im = imread('cameraman.tif');i = imnoise(im,'gaussian'); h1 = ones(3,3) / 9;h2 = ones(5,5) / 25; I1 = imfilter(i,h1);i2 = imfilter(i,h2); subplot(2,2,1);imshow(im,[ ]);title('original Image'); subplot(2,2,2);imshow(i,[ ]);title('image with Gaussian noise'); subplot(2,2,3);imshow(i1,[ ]); title('filtered Image with 3X3 average filter'); subplot(2,2,4);imshow(i2,[ ]); title('filtered Image with 5X5 average filter'); 13/3/2017 21
Matlab Basic ΦΙΛΤΡΟ ΜΕΣΑΙΑΣ ΤΙΜΗΣ παράδειγμα με Matlab Εφαρμογή φίλτρου median αφού η αρχική εικόνα επιμολυνθεί με 5%,20% θόρυβο salt and pepper. Η εντολή B = medfilt2(a) κάνει median filtering στον πίνακα A σε δυο διαστάσεις. Κάθε pixel που προκύπτει περιέχει την τιμή median στη γειτονιά 3- by-3 τριγύρω από το pixel αυτό. Η medfilt2 γεμίζει (pads) την εικόνα με 0 στις ακμές οπότε μπορεί να υπάρχουν αλλοιώσεις στις median τιμές. Η εντολή B = medfilt2(a, [m n]) κάνει median filtering όπου κάθε pixel που προκύπτει είναι η μεσαία τιμή (median value) σε μια m-by-n γύρω από το pixel αυτό στην αρχική εικόνα. E. Jebamalar Leavline, D. Asir Antony Gnana Singh, On Teaching Digital Image Processing with MATLAB, American Journal of Signal Processing, Vol. 4 No. 1, 2014, pp. 7-15. doi: 10.5923/j.ajsp.20140401.02. % Teaching salt and pepper noise removal using a simple median filter clc; clear all;close all; Im = imread('cameraman.tif'); I5 = imnoise(im,'salt & pepper', 0.05); I20 = imnoise(im,'salt & pepper', 0.2); I1=medfilt2(I5); I2=medfilt2(I20); subplot(3,3,1);imshow(im,[]), title('original Image'); subplot(3,3,2);imshow(i5,[]), title('image with 5% salt & pepper noise '); subplot(3,3,3);imshow(i20,[]), title('image with 20% salt & pepper noise '); subplot(3,3,4);imshow(i1,[]), title('filtered Image (5%) '); subplot(3,3,5);imshow(i2,[]), title('filtered Image (20%)');
clear all;close all; Im = imread('cameraman.tif'); I5 = imnoise(im,'salt & pepper', 0.05); I20 = imnoise(im,'salt & pepper', 0.2); I1=medfilt2(I5); I2=medfilt2(I20); subplot(3,3,1);imshow(im,[]), title('original Image'); subplot(3,3,2);imshow(i5,[]), title('image with 5% salt & pepper noise '); subplot(3,3,3);imshow(i20,[]), title('image with 20% salt & pepper noise '); subplot(3,3,4);imshow(i1,[]), title('filtered Image (5%) '); subplot(3,3,5);imshow(i2,[]), title('filtered Image (20%)'); 13/3/2017 23
Matlab ΦΙΛΤΡΑ GAUSS στη Matlab Basic Η εντολή h = fspecial('gaussian', hsize, sigma) Δίνει ένα περιφερειακά συμμετρικό φίλτρο Gauss (lowpass filter) μεγέθους hsize και τυπικής απόκλισης sigma (θετικός). Το hsize μπορεί να έιναι ένα διάνυσμα που να καθορίζει τον αριθμό γραμμών/στηλών στο h, η μπορεί να είναι βαθμωτη τιμή οπότε το h θα είναι τετράγωνος πίνακας. Η προεπιλεγμένη τιμή για το hsize είναι [3 3]και για το sigma 0.5.
Matlab ΦΙΛΤΡΑ GAUSS στη Matlab Basic h=fspecial('gaussian', [100 100],2); figure, imshow(h,[]) figure, imagesc(h), colormap jet h2=fspecial('gaussian', [100 100],7); figure, imagesc(h2), colormap jet figure, surf(h2), shading interp, colormap jet
Matlab ΦΙΛΤΡΑ GAUSS στη Matlab Basic
Matlab ΦΙΛΤΡΑ GAUSS στη Matlab Basic