TEORIA I ZASTOSOWANIA ANALIZY FALKOWEJ OBRAZÓW
PROJEKT KOŃCOWY
ZASTOSOWANIE FALEK DO DEKOMPOZYCJI, REKONSTRUKCJI
ORAZ DO KOMPRESJI OBRAZU PRZY WYKORZYSTANIU MAKSIMÓW MODULU TRANSFORMATY FALKOWEJ
Projekt ten składa się z dwóch części. Jest on jednocześnie rozszerzeniem materiału przedstawionego na wykładach.
Część I wykorzystuje funkcję Matlaba denoise, ktora operuje na standardowym obrazie Lena.bmp. Jeśli pożądane jest wykonanie dekompozycji trójpoziomowej obrazu, w którym stosunek sygnału do szumu (SNR) wynosi 15dB, z zastosowaniem eliminacji progowej twardej, piszemy:
denoise (3,15,'H').
Chcąc wykonać eliminację progową miękką zastępujemy `H' przez `S'. Używana jest transformata falkowa dyskretna.
Kod funkcji denoise składa się z następujących elementów:
Dolnoprzepustowy filtr analizy h_lp falki db4 jest wyspecyfikowany i użyty do wygenerowania filtra górnoprzepustowego analizy h_hp oraz filtrów dolno- i górnoprzepustowego syntezy, odpowiednio g_lp and g_hp.
Generacji zakłóconego obrazu Lena: dla pożądanego SNR wyznacza się szum i dodaje się go do obrazu oryginalnego otrzymując obraz zakłócony, z którego szum ma zostać usunięty.
Wyznaczanie progu dla eliminacji progowej twardej i miękkiej.
Pętla dekompozycji i eliminacji progowej szumu z zakłóconego obrazu Lena wraz ze wstępnym rozszerzeniem obrazu poprzez dodanie zer w celu wyeliminowania efektów brzegowych przy wyznaczaniu splotu z filtrami.
Pętla rekonstrukcji.
Wyznaczanie stosunku sygnału do szumu (SNR) dla oryginalnego obrazu zakłóconego oraz dla obrazu zrekonstruowanego po eliminacji szumu.
CZĘŚĆ I: DEKOMPOZYCJA I REKONSTRUKCJA OBRAZU
Odpowiednio zmodyfikuj funkcję denoise , żeby otrzymać funkcję, która najpierw wykona dekompozycję Lena.bmp lub dowolnego innego obrazu na zadaną ilość poziomów tak, żeby każdy zawierał aproksymację oraz detale poziome, pionowe i diagonalne, a następnie dokona rekonstrukcji. Spróbuj, używając różnych falek, dokonać dekompozycji i rekonstrukcji własnego obrazu.
Wcelu uzyskania filtrów dla dowlnych falek użyj funkcję wfilters. Wprowadź nazwę falki jako dodatkwy parametr w wywołaniu programu.
Twoja funkcja dekompozycji i rekonstrukcji powinna generować na każdym poziomie dekompozycji rysunek zawierajacy obraz poprzedniej aproksymacji oraz detale poziomy, pionowy i diagonalny aktualnego poziomu.
Przy użyciu GUI dokonaj dekompozycji i zrekonstruuj obraz reprezentowany przez zbiór Lena.mat,który musi być uprzednio wygenerowany posługując sie linią rozkazową Matlab.
Czesc II wykorzystuje funkcje Matlaba recon_mm, mm_atrous i mm_atrous_lena, ktore operuja na standardowym obrazie Lena.bmp. Funkcja recon_mm wywoluje funkcje mm_atrous, ktora generuje reprezentacje obrazu wzdluz wyznaczonych krawedzi bez progowania. Natomiast funkcja mm_atrous_lena generuje reprezentacje obrazu wzdluz wyznaczonych krawedzi z progowaniem.
CZĘŚĆ II: KOMPRESJA OBRAZU PRZY WYKORZYSTANIU MAKSIMÓW MODULU TRANSFORMATY FALKOWEJ
Zmodyfikuj recon_mm wprowadzajac poziom progowania jako dodatkowy parametr.
Odpowiednio zmodyfikuj funkcję mm_atrous_lena, zeby mogła przejąć rolę funkcji mm_atrous wykorzystywanej w oryginalnym recon_mm.
Zdefiniuj stopien kompresji i wyznacz jego wartość dla roznych poziomow progowania, oceniając jednoczesnie efekt wizualny, tzn. jakość odtworzonego obrazu. Skomentuj korelację pomiędzy stpniem kompresji i parametrem SNR przy zmianie pziomu progowania od 0 do 100.
PROJEKT POWINIEN ZAWIERAC WYDRUKOWANY RAPORT ORAZ CD Z RAPORTEM I PROGRAMAMI.
PROJEKT NALEŻY ZŁOŻYĆ W DZIEKANACIE W TERMINIE DO DNIA 30.06.08.
Kontakt: jan.bialasiewicz@cudenver.edu
CZĘŚĆ I.
1.1 kod, obrazy: detale + porownanie
opisac cos o detalach i obraz zrek nie rozni sie od orginalu
Kod orginalny (plik: denoise.m ,linijka: 9-24 )
[X,map] = imread(image);
Lena = double(ind2gray(X,map));
filter = [ .482962913145 .836516303738 ...
.224143868042 -.129409522551 ];
%Low-pass filter
h_lp = filter;
g_lp = wrev(h_lp);
%High-pass filter
h_hp = -( (-1).^(1:length(filter)) ).*wrev(h_lp);
g_hp = wrev(h_hp);
Kod zmieniony:
[X,map] = imread(image);
Lena = double(ind2gray(X,map));
[M,N] = size(Lena);
[h_lp,h_hp,g_lp,g_hp] = wfilters(wave);
filter = h_lp;
Opis:
Zmiana kodu dodaje możliwość załadowania dowolnego pliku graficznego oraz użycia dowolnej falki.
Kod orginalny (plik: denoise.m ,linijka: 210 )
brak tej funkcjonalnosci
Kod zmieniony:
for i=1:decomp_times
figure;
colormap(map);
subplot(221);
if i==1
imshow(Lena,[]);title(['Oryginalny']);
else
imshow(a{i-1},[]);title(['Aproksymacja ', num2str(i-1)]);
end;
subplot(222);imshow(h{i},[]);title(['Detal poziomy ',num2str(i)]);
subplot(223);imshow(v{i},[]);title(['Detal pionowy ',num2str(i)]);
subplot(224);imshow(d{i},[]);title(['Detal ukośny ',num2str(i)]);
end;
Opis:
Wyswietlanie aproksymacji i detali kazdego poziomu (detale kolejnego poziomu powstają z aproksymacji poprzedniego poziomu)
Skomentuj efekty uzyskane roznymi falkami
CZĘŚĆ II
2.1 obrazy: z gui
2.
2.1 kod recon_mm i inne
Kod orginalny (plik: recon_mm.m ,linijka: 1-10 )
function recon_mm(lvl)
[X,map] = imread('Lena.bmp');
Lena = ind2gray(X,map);
y=Lena(50:177,50:177);
%y = Lena;
save_orig = y;
[nr,nc]=size(y);
[a, D1_MM, D2_MM, gprime, hprime] = mm_atrous(lvl);
Kod zmieniony:
function recon_mm(lvl,thresh)
[X,map] = imread('Lena.bmp');
Lena = ind2gray(X,map);
y=Lena(50:177,50:177);
%y = Lena;
save_orig = y;
[nr,nc]=size(y);
[a, D1_MM, D2_MM, gprime, hprime,comp] = mm_atrous_lena(lvl,thresh);
Opis:
dodano mozliwość ustawiania poziomu progowania (treshholda) i funkcja mm_atrouse została podmieniona na mm_atrouse_lena
Kod orginalny (plik: mm_atrue_lena.m ,linijka: 181 )
figure;
for k = 1:decomp_times
subplot(decomp_times,1,k)
imshow(wtm{k},[]);
if k == 1
title('Wavelet Transform Modulus');
end
end
Kod zmieniony:
zero_len = 0;%zmiana
figure;
for k = 1:decomp_times
subplot(decomp_times,1,k)
imshow(wtm{k},[]);
%liczenie wyzerowanych miejsc tablicy
zero_len = zero_len+length(find(mod_max{k}==0));
%liczenie wyzerowanych miejsc tablicy
if k == 1
title('Wavelet Transform Modulus');
end
end
%liczenie wielkosci tablicy
[x_size,y_size]=size(mod_max{1});
data_len = x_size*y_size;
%liczenie stopnia kompresji
compress = 100 - 100*(zero_len/data_len);
comp = compress;
Opis:
dodanie mozliwości obliczenia stopnia kompresji(jest to sto minus stor razy stosunek wyzerowanych maksim w obrazie do wszystkich maksim w obrazie)
obrazki treshhold
Skomentuj korelację pomiędzy stpniem kompresji i parametrem SNR przy zmianie pziomu progowania od 0 do 100.
Illustration 1: Detale poziomu pierwszego powstałe z orginalnego obrazka
Illustration 2: Detale poziomu drugiego powstałe z pierszej aproksymacji
Illustration 4: Porównanie orginalego obrazu i obrazu zrekonstruowanego
Illustration 3: Detale poziomu trzeciego powstałe z drugiej aproksymacji
Illustration 5: Porownanie orginalneo obrazu z obrazami po rekonstrukcji(po dekompozyzji różnimi falkami
Illustration 6: Obraz GUI pokazujący interface do tworzenia dekompozycji i rekonstrukcji obrazu: Lena.bmp