Rekonstrukcja obrazu - usuwanie rozmycia (image deblurring) W trakcie rejestracji obrazu występuje wiele czynników powodujących degradację jakości zarejestrowanego obrazu. Poza szumami jedną z podstawowych wad obrazu jest jego rozmycie. Wynikać może ono najczęściej z dwóch przyczyń: źle ustawionej ostrości, ruchu kamery w trakcie akwizycji.
Podział algorytmów usuwania rozmycia Algorytmy usuwania rozmycia obrazu można zasadniczo podzielić na dwie kategorie: blind deconvolution - nie mamy wiedzy o funkcji przejścia PSF systemu akwizycji obrazu. Funkcja PSF jest estymowana na podstawie obrazu i następnie wykorzystywana do eliminacji efektu rozmycia, regular deconvolution - znan jest funkcja przejścia PSF systemu akwizycji obrazu i wykorzystywana jest do eliminacji rozmycia. inverse filtering - funkcja podstawowa Wiener Deconvolution - wymaga estymaty szumu regularization filter Richardson-Lucy deconvolution
Inverse Filtering Jeżeli znany jest dobry model funkcji powodującej rozmycie obrazu, najszybszą metodą jest zastosowanie filtru odwrotnego. Wadą takiego rozwiąznie jest to, że filtr ten jest filtrem górnoprzepustowym co powoduje, że w przypadku obecności szumu w obrazie jego działanie powoduje powiększenie szumu. Przykładami metod wykorzystujących funkcje odwrotną są: thresholding, metoda iteracyjna.
Metoda 1: Progowanie (Thresholding) Model obrazu rozmytego można opisać równaniem gdzie f jest obrazem oryginalnym, b jest filtrem rozmywającym, g jest rozmytym obrazem. W celu uzyskania obrazu oryginalnego, konieczne jest wykonanie splotu obrazu rozmytego z filtrem odwrotnym fo funkcji rozmywającej. Problemem jest określenie funkcji h? Jeżeli wyznaczymy DFT funkcji b B=DFT2(b), to otrzymamy następującą funkcję
W idealnym przypadku można dokonać inwersji wszystkich elementów funkcji B w celu uzyskania filtru górnoprzepustowego. Jednak wiele elementów funkcji B ma wartości bliskie lub równe zero. Odwrócenie tych elementów spowoduje, że współczynniki będą dążyć do nieskończonosci. W celu unikniecia tego zjawiska wprowadza sie progowanie opisane następująca zależnoscią: Czym większa jest wartość graniczna tym dokładniejszy jest filtr odwrotny. W praktycznych realizacjach, występuje problem z obróbka wartosci dążących do nieskończonosci w związku z tym wygodniej jest ograniczyć wartosci funkcji B zanim wyznczona zostanie funkcja odwrotna. Wartość n jest ustawiono stosunkowo blisko zera, w przypadku obrazów o małym szumie.
Przyklad dla wartości n=0.0001. Warto zaznaczyć, że wynik jest bliski obrazowi oryginlnemu.
Ponieważ filtr odwrotny jest filterm górnoprzepustowym, to nie działa on poprawnie dla obrazów zaszumionych. Istnieje sprzeczność pomiędzy wyostrzaniem i odszumianiem. Przykład obrazu zaszumionego. n=0.2. Można trochę zmniejszyć wpływ szumu zwiekszajac n, ale wpłynie to wtedy na działanie filtru usuwającego rozmycie.
Przykładowy kod w Matlabie N=256; n=.2; f=freadbin('lenna.256',n,n); figure(1) imagesc(f) colormap(gray) b=ones(4,4)/4^2; F=fft2(f); B=fft2(b,N,N); G=F.*B; g=ifft2(g)+10*randn(n,n); G=fft2(g); figure(2) imagesc(abs(ifft2(g))) colormap(gray) BF=find(abs(B)<n); %B(BF)=max(max(B))/1.5; B(BF)=n; H=ones(N,N)./B; I=G.*H; im=abs(ifft2(i)); figure(3) imagesc(im) colormap(gray
Method 2: Procedura iteracyjna (Iterative Procedure) Idea metody polega na odgadnięciu f bazujac na g i uaktualnieniu odgadniętej funkcji w każdej iteracji gdzie g jest początkową wartością bazująca na g. Jeżeli oba równania przekształcimy do dziedziny częstotliwościowej to otrzymamy Rozwiązujac je iteracyjnie otrzymuje sie Solving for recursively, we get W związku z tym jeżeli dąży do zera jeżeli k dąży do nieskończonosci, to otrzymujemy wynik będący funkcja odwrotną. W rzeczywistosci metoda ta nie daje takiego samego wyniku jak funkcja odwrotna, ale jest mniej czuła na szumy w obrazie. Praktyczna realizacja. Na początku należy określić λ, które spełnia równanie w związku z czym musi być dodatnią wartością w zakresie od 0 do 1. Czym będzie wieksza, tym szybsza będzie zbieżność, lecz w przypadku za dużej wartości algorytm moze stracić zbieżność. Kompromisem jest duży krok na poczatku i zmniejszanie go w kolejnych iteracjach.
Przykład pokazuje niezaszumiony obraz po 150 iteracjach, startując od 0.1 i zmniejszając wartość o 10% co 25 iteracji. Obraz jest ostrzejszy niż obraz rozmyty, jednak wynik jest gorszy nizuzyskany dla funkcji odwrotnej.
Kolejny przykład pokazuje obraz zaszumiony po wykonaniu 150 iteracji. Uzyskany obraz jest trochę lepszy niż obraz zaszumiony przekształcony przez funkcję odwrotną.
Przykładowy kod w Matlabie N=256; lambda=0.1; f=freadbin('lenna.256',n,n); figure(1) imagesc(f) colormap(gray) F=fft2(f); b=ones(4,4)/16; B=fft2(b,N,N); G=F.*B; %g=ifft2(g)+10*randn(n,n); %G=fft2(g); figure(2) imagesc(abs(ifft2(g))) colormap(gray) K=lambda*G; for l=1:1500, if mod(l,25)==0 lambda=lambda/5; end A=G-K.*B; K=K+lambda*A; if mod(l,50)==0 l sum(sum(a)) figure(3) imagesc(abs(ifft2(k))) colormap(gray) pause end end
Filtr Wienera (Wiener Filtering) Filtracja za pomocą funkcji odwrotnej wykorzystująca operację splotu, stosowana jest wtedy kiedy obraz jest rozmyty przez znana funkcję dolnoprzepustową i umozliwia usyskanie obrazu oryginalnego. Wadą tej metody jest duża czułość na szum. Rozwiązanie problemu filtracji powinno zapewniać kompromis pomiędzy szumem i rozmyciem. Optymalnym rozwiązaniem w takiej sytuacji jest filtr Wienera, który łączy w optymalny sposób wygładzanie z filtracja odwrotną. W efekcie jednocześnie zmniejsza rozmycie i usuwa szum. Filtr Wienera jest optymalny w sensie minimalizacji błędu średnikwadratowego. Filtr Wienera jest liniowym estymatorem obrazu oryginalnego i bazuje na obliczeniach statystycznych.
W dziedzinie częstotliwości może on być opisany nastepująca zależnością gdzie jest spektrum mocy obrazu oryginalnego i addytywnego szumu. Można zauważyć, że ma on dwie oddzielne części, jedną związaną z filtracją odwrotną i drugą związaną z wygładzaniem szumu. W efekcie filtr ten realizuje filtracje odwrotną (górnoprzepustową) oraz usuwanie szumu (dolnoprzepustowe).
W celu zaimplementowania filtru Wienera w praktyce należy znać estymaty spektrum mocy obrazu oryginalnego i addytywnego szumu. Dla białego szumu spektrum mocy jest równe wariancji szumu. W celu określenia estymaty mocy obrazu oryginalnego stosowanych jest wiele metod. Bezpośrednią estymata jest periodogram spektrum mocy wyznaczone z obserwacji: gdzie Y(k,l) jest DFT z obserwacji. Zaletą takiej estymaty, jest to że może ona byś wyznaczona w łatwy sposób bez obawy o osobliwości jakie są związane z wyznaczaniem funkcji odwrotnej
Inna estymatą prowadzącą do kaskadowej implementacji filtracji odwrotnej i wygładzania szumu jest zależność która jest bezpośrednim wynikiem faktu, że Spektrum mocy może być wyznaczone bezpośrednio z obserwacji przy wykorzystaniu estymaty periodogramu. Wynikowa estymata jest kaskadową implementacją filtracji odwrotnej i wygładzania szumu
Przykład filtracji Wienera. To illustrate the Wiener filtering in image restoration we use the standard 256x256 Lena test image. Obraz o rozmiarze 256x256 jest rozmyty nastepujacym filtrem dolnoprzepustowym. Następnie dodany jest szum biały o rozkładzie Gaussa i wariancji 100. Następnie wykorzystany został filtr Wienera Obraz po rekonstrukcji
function ex = wienerfilter(y,h,sigma,gamma,alpha); % % ex = wienerfilter(y,h,sigma,gamma,alpha); % % Generalized Wiener filter using parameter alpha. When % alpha = 1, it is the Wiener filter. It is also called % Regularized inverse filter. % % Reference: Richb's paper % Created: Tue May 4 16:24:06 CDT 1999, Huipin Zhang N = size(y,1); Yf = fft2(y); Hf = fft2(h,n,n); Pyf = abs(yf).^2/n^2; % direct implementation of the regularized inverse filter, % when alpha = 1, it is the Wiener filter % Gf = conj(hf).*pxf./(abs(hf.^2).*pxf+alpha*sigma^2); % % Since we don't know Pxf, the following % handle singular case (zero case) shf = Hf.*(abs(Hf)>0)+1/gamma*(abs(Hf)==0); ihf = 1./sHf; ihf = ihf.*(abs(hf)*gamma>1)+gamma*abs(shf).*ihf.*(abs(shf)*gamma<=1); Pyf = Pyf.*(Pyf>sigma^2)+sigma^2*(Pyf<=sigma^2); Gf = ihf.*(pyf-sigma^2)./(pyf-(1-alpha)*sigma^2); % max(max(abs(gf).^2)) % should be equal to gamma^2 % Restorated image without denoising exf = Gf.*Yf; ex = real(ifft2(exf)); return
clear;clf; % Input and display the binary image N = 256; x = readbin('lenna.256',n,n); figure(1) imshow(x,gray(256)) % Blur the image, corrupt the image using WGN and display it % h is the blurring filter, and sigma is the noise std h = ones(4,4)/16; sigma = 10; Xf = fft2(x); Hf = fft2(h,n,n); y = real(ifft2(hf.*xf))+sigma*randn(n,n); % circular convolution %y = filter2(h,x)+sigma*randn(n,n); % linear convolution figure(2) imshow(y,gray(256)) % restoration using generalized inverse filtering gamma = 2; eix = inversefilter(y,h,gamma); figure(3) imshow(eix,gray(256)) % restoration using generalized Wiener filtering gamma = 1; alpha = 1; ewx = wienerfilter(y,h,sigma,gamma,alpha); figure(4) imshow(ewx,gray(256)) PSNR = [psnr(y,x) psnr(eix,x) psnr(ewx,x)] return
Richardson Lucy deconvolution, Procedura iteracyjna pozwalająca na uzyskanie estymaty obrazu oryginalnego z obrazu rozmytego jeżeli jest znana funkcja rozmycia. Rozmyty obraz jest opisany zależnoscią z uzyciem funkcji rozmywającej gdzie p ij jest punktową funkcja rozmywającą, u j jest wartością piksela obrazu oryginalnego i di piksela obserwowanego. Zakładamy, że u j jest opisana rozkładem Poissona. Równanie pozwalające wyznczyć obraz oryginalny ma postać. gdzie