Wprowadzenie do przetwarzania obrazów Radosław Mantiuk Zakład Grafiki Komputerowej Wydział Informatyki Politechnika Szczecińska Maj 2008 All Images in this presentation are the courtesy of Richard Alan Peters
Histogram (1) niezależne histogramy dla wszystkich kanałów koloru Image is a courtesy of Richard Alan Peters
Histogram (2) liczba pikseli o danej wartości (poziomie szarości)
Histogram (3) liczba pikseli o danej wartości wartość pikseli (ang. bins) Image is a courtesy of Richard Alan Peters
Histogram (4) Pseudokod programu obliczającego dane histogramu. // input data:! image[] - data of an input image (one 8-bit channel)! width, height - dimensions of an image!! // clear bins! for( i = 0; i < 256; i++ )!!hist[i] = 0;!! // count frequencies! for( i = 0; i < width*height; i++ ) {!!!hist[ image[i] ]++;!!! }!! return hist[] Image is a courtesy of Richard Alan Peters
Przetwarzanie pikseli (ang. Point processing) Przetwarzanie pikseli polega na zmianie wartości koloru dla poszczególnych pikseli obrazu. Każdy piksel przetwarzany jest przez tą samą funkcję.
Przetwarzanie pikseli - Przykłady Przykłady przetworzonych obrazów Image is a courtesy of Richard Alan Peters
Tablice LUT (Look-up Tables) (1) Szybkie przetwarzanie pikseli.
Tablice LUT (Look-up Tables) (2) Piksel może mieć 256 wartości dla każdego kanału koloru.
Zwiększenie brightness Dodanie wartości większej od 0 do każdego piksela.
Zmniejszenie brightness Odjęcie wartości większej od 0 do każdego piksela.
Zwiększenie kontrastu! Zwiększenie wartości jasnych pikseli i zmniejszenie wartości dla ciemnych.
Zmniejszenie kontrastu
Funcje PDF i CDF Prawdopodobieństwo, że losowo wybrany piksel ma wartość g. liczba pikseli w obrazie N i= 0 liczba pikseli o wartości g (odczytana z histogramu) p(g) = 1 A h(g) A = h(g i ) PDF (ang. Probability Density Function) - prawdopodobieństwo dla danego przedziału Funcja CDF (ang. Cumulative Distribution Function) g CDF(g) = h(g ) i i= 0 Prawdopodobieństwo, że losowo wybrany piksel ma wartość mniejszą lub równą g.
Wyrównanie histogramu (ang. histogram equalization) Zmiana wartości pikseli tak, aby histogram był poziomy (wszystkie poziomy szarości występowały jednakową liczbę razy) J(r,c) = 255 CDF(I(r,c)) A Zamiana każdego piksela na CDF dla tego piksela.
Wyrównanie histogramu (ang. histogram equalization) Podkreślenie szczegółów w obrazie.
Dopasowanie histogramu (ang. histogram matching) Zmiana histogramu danego obrazu tak, aby jak najlepiej pasował on do histogramu innego obrazu. ang. percentile - wartość piksela, dla której określony procent pikseli ma wartość mniejszą (np. 20 percentil oznacza taką wartość piksela, że 20% pikseli w obrazie ma wartość mniejszą od tej wartości)
Dopasowanie histogramu (ang. histogram matching)
Dopasowanie histogramu (ang. histogram matching)
Dopasowanie histogramu (ang. histogram matching)
Splot (ang. convolution) Wykorzystanie splotu:
Transformacja ruchomego okna (ang. moving window transform) Dla każdego piksela obrazu wykonanie splotu z maską filtra.
Rozmycie obrazu - filtr dolnoprzepustowy
Rozmycie obrazu - filtr dolnoprzepustowy
Rozmycie obrazu - filtr dolnoprzepustowy
Rozmycie obrazu - filtr dolnoprzepustowy
Wykrywanie krawędzi
Wykrywanie krawędzi Wertykalnie
Wykrywanie krawędzi Horyzontalnie
Wykrywanie krawędzi Wertykalnie + horyzontalnie
Wykrywanie krawędzi Diagonalnie
Splot w dziedzinie częstotliwości W dziedzinie częstotliwości splot jest iloczynem funkcji. splot w dziedzinie obrazu (całkowanie)
Filtr dolnoprzepustowy Maska idealnego filtru dolnoprzepustowego
Filtr górnoprzepustowy Maska idelanego filtru górnoprzepustowego
Funkcja Gaussa Wykorzystywana do tworzenia masek filtrów
Funkcja Gaussa - Filtr dolnoprzepustowy
Funkcja Gaussa - Filtry Brak artefaktów
Porównanie filtrów Filtry idealne
Porównanie filtrów Filtry gaussowskie
Band Pass Filter Filtrowanie wybranego zakres częstotliwości
Szum (ang. noise) Szum skorelowany z obrazem: interferencja elektryczna, interferencja z sensorem, pasma moire'a. Szum nieskorelowany: błędy sensora, błąd kwantyzacji, szum na siatkówce, halftoning. obraz obraz idealny szum
Szum nieskorelowany - losowy
Szum nieskorelowany - Szum Gaussa
Szum nieskorelowany - Szum jednorodny
Obraz zaszumiony szumem Gaussa
Reprezentacja częstotliwościowa obraz idealny obraz zaszumiony
Redukcja szumu obraz rozmyty obraz z zamaskowanym szumem
PSF (ang. Point Spread Function) Splot obrazu z funkcja PSF (ang. Point Spread Function ) (OTF (ang.optical Transfer Function) )
Szum skorelowany - Periodyczny
Redukcja szumu periodycznego obraz idealny obraz zaszumiony maskowanie na zaszumionym obrazie
Redukcja szumu periodycznego
Szum na obrazach po skanowaniu (ang. halftoning)
Redukcja szumu - Filtr Gauss'a
Redukcja szumu - Filtr Gauss'a
Filtr bilateralny (ang. bilateral filtering) Rozmycie obrazu obraz wejściowy * obraz wyjściowy * * Stały kernel
Filtr bilateralny (ang. bilateral filtering) obraz wejściowy * obraz wyjściowy * * Kształt kernela zależy od kontentu obrazu.
Filtr bilateralny (ang. bilateral filtering) Filtr nieliniowy wygładzający obraz z zachowaniem krawędzi. Jasność piksela zastępowana jest sumą ważoną jasności otoczenia tego piksela. Wagi zależą od odległości od piksela oraz od różnicy jasności między pikselami z otoczenia. BF 1 [ I] = p G r W p q S ( p q ) G ( I I ) σ s σ p q I q współ. normalizujący waga przestrzenna (space) waga jasności (range) I
Filtr bilateralny (ang. bilateral filtering) σ r = 0.1 σ r = 0.25 σ r = (Gaussian blur) σ s = 2 σ s = 6 σ s = 18
Filtr bilateralny (ang. bilateral filtering) function Y = bilateral_fast( X, sigma_s, sigma_r ) % Fast bilateral filter % Y = bilateral_fast( X, sigma_s, sigma_r ) % sigma_s - space (2% of image diagonal) % sigma_r - range (mean or median of image gradients) if ~exist( 'sigma_s', 'var' ) sigma_s = 2; end if ~exist( 'sigma_r', 'var' ) sigma_r = 0.1; end n=6; % number of layers min_x = min(x(:)); max_x = max(x(:)); r = linspace( min_x, max_x, n ); L = zeros( n, numel( X ) ); for i=1:n D = exp(-(x - r(i)).^2/(2*sigma_r^2)); K = blur_gaussian( D, sigma_s ); Ls = blur_gaussian( X.*D, sigma_s ); L(i,:) = Ls(:)./K(:); end % interpolate ind_r = clamp((x(:)-min_x)/(max_x-min_x)*(n-1)+1, 1, n); ind_down = floor(ind_r); ind_up = ceil(ind_r); ind_fix = (0:n:((numel(X)-1)*n))'; ind_up = ind_up + ind_fix; ind_down = ind_down + ind_fix; ratio = mod( ind_r, 1 ); Y = zeros( size(x) ); Y(:) = L(ind_up).*ratio + L(ind_down).*(1-ratio); end function Y = clamp( X, min, max ) Y = X; Y(X<min) = min; Y(X>max) = max; end
Unsharp masking Wyostrzanie obrazu za pomocą jego rozmytej wersji (unsharp mask). Generuje iluzję typu Cornsweet. Od obrazu odejmowana jest jego rozmyta i przeskalowana wersja. W rezultacie w pobliżu krawędzi pojawia się efekt Cornsweet. Rozmyty obraz odejmowany jest selektywnie, w zależności od tego czy różnica wartości piksela oryginału i obrazu rozmytego jest wystarczająca.
Unsharp masking imsharpening