Επεξεργασία εικόνας Μιχάλης ρακόπουλος Υπολογιστική Επιστήµη & Τεχνολογία, #08 1
Επεξεργασία εικόνας Βασικό ανάγνωσµα: Η ενότητα 12.4 από το ϐιβλίο των Van Loan και Fan. Επεξεργασία εικόνας Μ. ρακόπουλος 2 Μια εικόνα είναι ένας πίνακας Πίνακας 336 470 Επεξεργασία εικόνας Μ. ρακόπουλος 3 Κωδικοποίηση εικόνων Συνηθέστερα: JPEG, GIF, PNG Τα δεδοµένα είναι συµπιεσµένα Στο MATLAB: imread διαβάζει ένα αρχείο εικόνας και το µετατρέπει σε πίνακα. imwrite γράφει πίνακα σε συµπιεσµένο αρχείο εικόνας (π.χ..jpg) imshow εµφανίζει έναν πίνακα ως εικόνα Οι πίνακες ασπρόµαυρων εικόνων είναι δισδιάστατοι κάθε στοιχείο αντιστοιχεί σε ένα pixel οι τιµές είναι στο διάστηµα [0, 255] (0=µαύρο, 255=άσπρο) οι τιµές είναι τύπουuint8 Επεξεργασία εικόνας Μ. ρακόπουλος 4 2
Τύποι δεδοµένων στο MATLAB Από default: double (που ερµηνεύονται ανάλογα σανint) Υποστηρίζει µε κατάλληλη δήλωση: Πραγµατικούς απλής ακρίβειας: single Προσηµασµένους ακεραίους: int8,int16,int32,int64. Μη-προσηµασµένους ακεραίους: uint8,uint16,uint32,uint64. >> A=ones(3, single ); >> y=2.5; x=single(2.5); i=1; >> whos Name Size Bytes Class A 3x3 36 single i 1x1 8 double x 1x1 4 single y 1x1 8 double >> [intmin( uint8 ) intmax( uint8 )] ans = 0 255 Επεξεργασία εικόνας Μ. ρακόπουλος 5 Μια εικόνα σε κορνίζα Επεξεργασία εικόνας Μ. ρακόπουλος 6 3
Υλοποίηση % read image as array P = imread( cat.jpg ); [nr,nc]=size(p); % show original image imshow(p); % frame width and colour width=50; framecolour=50; % modify image for r = 1:nr for c = 1:nc if r<width r>nr-width... c<width c >nc-width P(r,c) = framecolour; % show modified image imshow(p); Επεξεργασία εικόνας Μ. ρακόπουλος 7 Τµήµατα εικόνας >> imshow(p(80:200,150:300)) Επεξεργασία εικόνας Μ. ρακόπουλος 8 4
Εγχρωµες εικόνες Επεξεργασία εικόνας Μ. ρακόπουλος 9 Αναπαράσταση έγχρωµων εικόνων Τρισδιάστατος πίνακας 2448 3264 3. Κάθε pixel έχει 3 τιµές (RGB). Κάθε στοιχείο A(i,j,k) του πίνακα είναι τύπου uint8 µε ακέραιες τιµές από 0 έως 255. Επεξεργασία εικόνας Μ. ρακόπουλος 10 5
Κατοπτρική απεικόνιση Επεξεργασία εικόνας Μ. ρακόπουλος 11 Υλοποίηση 1 A = imread( vathy.jpg ); tic [nr, nc, np] = size(a); for r = 1:nr for c = 1:nc for p = 1:np B(r,c,p) = A(r,nc-c+1,p); toc subplot(121) imshow(a) subplot(122) imshow(b) Χρόνος εκτέλεσης : 56.02sec Επεξεργασία εικόνας Μ. ρακόπουλος 12 Υλοποίηση 2 A = imread( vathy.jpg ); tic [nr, nc, np] = size(a); for p = 1:np for c = 1:nc for r = 1:nr B(r,c,p) = A(r,nc-c+1,p); toc subplot(121) imshow(a) subplot(122) imshow(b) Χρόνος εκτέλεσης : 31.25sec 6
Επεξεργασία εικόνας Μ. ρακόπουλος 13 Υλοποίηση 3 A = imread( vathy.jpg ); tic [nr, nc, np] = size(a); B = zeros(nr, nc, np); B = uint8(b); for p = 1:np for c = 1:nc for r = 1:nr B(r,c,p) = A(r,nc-c+1,p); toc subplot(121) imshow(a) subplot(122) imshow(b) Χρόνος εκτέλεσης: 3.37sec Επεξεργασία εικόνας Μ. ρακόπουλος 14 Υλοποίηση 4 (vectorized) A = imread( vathy.jpg ); tic [nr, nc, np] = size(a); B = zeros(nr, nc, np); B = uint8(b); for c = 1:nc B(:,c,1) = A(:,nc-c+1,1); B(:,c,2) = A(:,nc-c+1,2); B(:,c,3) = A(:,nc-c+1,3); toc subplot(121) imshow(a) subplot(122) imshow(b) Χρόνος εκτέλεσης: 0.51sec Επεξεργασία εικόνας Μ. ρακόπουλος 15 7
Υλοποίηση 5 (vectorized) A = imread( vathy.jpg ); tic nc = size(a,2); B = A(:,nc:-1:1,:); toc subplot(121) imshow(a) subplot(122) imshow(b) Χρόνος εκτέλεσης: 0.04sec Επεξεργασία εικόνας Μ. ρακόπουλος 16 Εγχρωµη εικόνα σε ασπρόµαυρη Επεξεργασία εικόνας Μ. ρακόπουλος 17 8
Εγχρωµη εικόνα σε ασπρόµαυρη (συνεχ.) Στάθµιση των τιµών RGB π.χ. µέσος όρος C = A(:,:,1)/3 + A(:,:,2)/3 + A(:,:,3)/3 Ερώτηση : είναι το ίδιο µε D = (A(:,:,1) + A(:,:,2) + A(:,:,3))/3 Επεξεργασία εικόνας Μ. ρακόπουλος 18 Αφαίρεση θορύβου από εικόνα Επεξεργασία εικόνας Μ. ρακόπουλος 19 9
Εισαγωγή στιγµάτων C = P(250:500,250:500); for k = 1:200 i = floor(1+rand(1)*250); j = floor(1+rand(1)*250); C(i:i+1,j:j+1) = floor(10*rand(2)); Επεξεργασία εικόνας Μ. ρακόπουλος 20 ιόρθωση προβληµατικών pixels Ο πίνακας µιας προβληµατικής περιοχής: >> A = P(17:22,12:17) A = 120 119 119 118 122 122 122 121 120 120 123 123 124 123 5 9 123 123 121 121 7 1 123 123 124 123 122 122 123 124 125 125 124 123 124 124 Αντικατάσταση της τιµής κάθε pixel από: διάµεσο των τιµών των γειτόνων του µέση τιµή των τιµών των γειτόνων του Ο αριθµός των γειτόνων ενός pixel (συµπεριλαµβανοµένου και του εαυτού του) µπορεί να είναι: 9 για εσωτερικά σηµεία 6 για σηµεία στις πλευρές της εικόνας 4 για σηµεία στις γωνίες της εικόνας Επεξεργασία εικόνας Μ. ρακόπουλος 21 10
ιόρθωση µε διάµεσο function B = MedianFilter(A) % A is an m-by-n uint8 array. % B is an m-by-n uint8 array obtained from A % by median filtering [m,n] = size(a); B = zeros(m,n, uint8 ); for i=1:m for j=1:n % The matrix of neighbors... imin = max(1,i-1); imax = min(m,i+1); jmin = max(1,j-1); jmax = min(n,j+1); Neighbors = A(iMin:iMax,jMin:jMax); % The median value... B(i,j) = median(neighbors(:)); Επεξεργασία εικόνας Μ. ρακόπουλος 22 ιόρθωση µε διάµεσο (συνεχ.) Αρχικός πίνακας >> A A = 120 119 119 118 122 122 122 121 120 120 123 123 124 123 5 9 123 123 121 121 7 1 123 123 124 123 122 122 123 124 125 125 124 123 124 124 ιορθωµένος πίνακας >> MedianFilter(A) ans = 121 120 120 120 122 123 122 120 119 120 122 123 122 121 120 120 123 123 123 122 121 122 123 123 124 123 122 123 123 124 125 124 123 123 124 124 Επεξεργασία εικόνας Μ. ρακόπουλος 23 11
ιόρθωση µε µέση τιµή function B = MeanFilter(A) % A is an m-by-n uint8 array. % B is an m-by-n uint8 array obtained from A % by mean filtering [m,n] = size(a); B = zeros(m,n, uint8 ); for i=1:m for j=1:n % The matrix of neighbors... imin = max(1,i-1); imax = min(m,i+1); jmin = max(1,j-1); jmax = min(n,j+1); Neighbors = A(iMin:iMax,jMin:jMax); % The mean value... B(i,j) = mean(neighbors(:)); Επεξεργασία εικόνας Μ. ρακόπουλος 24 ιόρθωση µε µέση τιµή (συνεχ.) Αρχικός πίνακας >> A A = 120 119 119 118 122 122 122 121 120 120 123 123 124 123 5 9 123 123 121 121 7 1 123 123 124 123 122 122 123 124 125 125 124 123 124 124 ιορθωµένος πίνακας >> MeanFilter(A) ans = 121 120 120 120 121 123 122 108 95 95 109 123 122 96 70 70 96 123 123 97 70 71 97 123 123 110 96 97 110 124 124 124 123 123 123 124 Επεξεργασία εικόνας Μ. ρακόπουλος 25 12
Σύγκριση διορθώσεων Median Filtering Mean Filtering Επεξεργασία εικόνας Μ. ρακόπουλος 26 13
Ανίχνευση ακµών Επεξεργασία εικόνας Μ. ρακόπουλος 27 14
Ανίχνευση ακµών (συνεχ.) Γύρω από τις ακµές έχουµε απότοµες αλλαγές στις τιµές του γκρίζου [150*ones(20,40, uint8 ); 100*ones(20,40, uint8 )] Χρωµάτισε τα pixels που συνορέουν µε ακµή µε άσπρο και τα υπόλοιπα µε µαύρο. Επεξεργασία εικόνας Μ. ρακόπουλος 28 Τι σηµαίνει απότοµη αλλαγή Εστω το pixel (i, j) µε τιµή γκρίζου A ij καιn ij το σύνολο των pixels (p, q) που γειτονεύουν µ αυτό. Ορίζουµε τον πίνακα ϱυθµού µεταβολής του γκρίζου R, µε στοιχεία R ij = max { A pq A ij (p, q) N} την οριακή τιµή (κατώφλι) τ, που επιλέγεται σαν δεδοµένο εισόδου. Τότε το pixel (i, j) ανήκει σε ακµή και χρωµατίζεται άσπρο αν R ij τ, διαφορετικά, δεν ανήκει σε ακµή και χρωµατίζεται µαύρο. Προσοχή! γιαuint8 δεδοµέναx,yγια τα οποίαx < y == true, τότεabs(x-y) == 0. Γράφεται: abs(double(x)-double(y)) Επεξεργασία εικόνας Μ. ρακόπουλος 29 15
Συνάρτηση ανίχνευσης ακµών function Rho = Edges(A,tau) % A input image matrix % tau is a threshold value between 0 and 255. % Rho is a BW image matrix with white edge pixels % Check if rate of change is above threshold... [m,n] = size(a); Rho = zeros(m,n, uint8 ); %... for each pixel for i=1:m, for j = 1:n % The matrix of neighbors... N = A(max(1,i-1):min(i+1,m),max(1,j-1):min(j+1,n)); % Color white pixels threshold... if max(max(abs(double(n) - double(a(i,j))))) > tau Rho(i,j) = 255; Επεξεργασία εικόνας Μ. ρακόπουλος 30 Επίδραση της επιλογής του τ τ=5 τ=10 τ=75 τ=150 Επεξεργασία εικόνας Μ. ρακόπουλος 31 16