Informacje bieżące:
Egzamin 30 czerwca 2009 godzina 10:15, sala 140:
wyniki
Konsultacje: czwartek 18.VI do 12 lub 13:15-14:15
Konsultacje: czwartek 25.VI 12:15-14:00
program wykładu uaktualniony 10 czerwca
Przykładowe zagadnienia:
- Wstęp i przegląd bibliotek
- Reprezentacje przestrzenne i widmowe
- Transformaty Fouriera
- Sposoby pozyskiwania obrazów
- Przekształcenia geometryczne
- Przekształcenia pikseli
- Zastosowania histogramów
- Filtry liniowe i nieliniowe
- Modele szumu i jego usuwanie
- Dylacja i erozja
- Rejestracja
- Segmentacja
- Synteza tekstur
- Fotografia obliczeniowa
- Kolory, odległości obrazów, profile urządzeń ICC
- B.Jahne - "Digital Image Processing", 5th edition, Springer-Verlag
2002.
- T. Pavlidis, Grafika i przetwarzanie obrazów, WNT, Warszawa 1987.
- R.C.Gonzales, R.E.Woods - "Digital Image Processing", 2nd edition,
Prentice Hall 2002.
- W.K.Pratt - "Digital Image Processing", 3rd edition, John Wiley & Sons
2001.
Ogólne:
Oprogramowanie:
- NetPBM - wygodny zestaw
programów do przetwarzania obrazów z lini poleceń i potoków.
- ImageMagick - między innymi
program 'convert' do przetwarzania obrazów z lini poleceń.
- GIMP - program do edycji grafiki
rastrowej (licencja GNU)
- Cinepaint - Filmgimp
- program do edycji grafiki rastrowej (licencja GNU) z obsługą więcej niż 8
bitów na kanał (w tym formaty HDR) i obsługą profili kolorów.
- XnView -
przeglądarka i konwerter plików graficznych (Win/Linux/...) oraz GFL SDK
czyli biblioteki do czytania/zapisywania wielu formatów plików graficznych.
Programowanie:
Programowanie: OpenGL:
Programowanie: OpenGL Toolkits (otwieranie okna, obsługa klawiatury i myszy...) :
Programowanie: Interface Libraries (biblioteki z przyciskami, suwakami,... ):
Zasoby lokalne:
Iluzje:
Pracownia/Ćwiczenia:
Aby zaliczyć pracownie/ćwiczenia należy do końca semestru otrzymać ponad
połowę sumy wszystkich punktów. Punkty będą przyznawane za zadania do
zrobienia na bieżącej pracowni lub z terminem kilku tygodni (odpowiednio
więcej punktowane), a także za ćwiczenia.
Dla większych zadań dopuszczalne będzie oddawane z opóźnieniem
z karnymi punktami (20% mniej za każdy tydzień po terminie).
- Pracownia 4-11 marca 2009: (10pkt)
Celem jest zapoznanie z różnymi programami do obróbki obrazów (1-4)
i z bazowymi przykładami programów w C/C++ (5-6).
Zaliczenie polega na pokazaniu
prowadzącemu rozwiązań w trakcie pracowni.
Jako obrazy przykładowe należy użyć
lena.jpg (klasyka) i kilka dowolnie wybranych.
- Zapoznać się z programami NetPBM: jpegtopnm, pnmtojpeg, pnmarithm,
pnmsmooth, ... . Zrealizować przy ich pomocy operacje 'unsharp mask'
polegająca na odjęciu od obrazu wersji rozmytej (pnmsmooth) i w ten
sposób wyostrzającej obraz.
- Zapoznać się z programami z pakietu ImageMagick. Przy pomocy programu
convert wykonać kolejno dwie operacje rozmycia (blur) i wyostrzenia
(sharpen). Czy zmiana kolejności tych operacji daje inny obraz ?
Sprawdzić licząc różnice obrazów i jej histogram przy użyciu np.
pnmarith/ppmhist.
- Dobrać w poprzednim punkcie do parametru wyostrzania =40 parametr
rozmycia tak aby uzyskać obraz jak najbardziej zbliżony do orginału,
wygenerować i wyświetlić różnice. Dla której kolejności
rozmycie-wyostrzenie czy wyostrzenie-rozmycie optymalny dobór
wartości da mniejszą różnice od obrazu orginalnego.
- Zapoznać sie z programem Gimp i działaniem przekształceń w menu
narzędzia kolorów: poziomy(levels), krzywe(curves).
- Przekompilować i uruchomić przykładowe programy do wyświetlania
i przekształcen obrazów AImgView.C (AImage+OpenGL+GLUT_GLF),
cimg_tst.C (CImg), dostępne w katalogu examples1.
- Zmodyfikować oba przykłady z poprzedniego punktu tak aby wyświetlały
negatyw obrazu (czyli dla każdej składowej R,G,B f(x)=255-x).
Można także napisać podobny przykład używając biblioteki SDL
do wyświetlania i ładowania obrazów (SDL_Image).
- Pracownia 11-18 marca 2009: (12pkt)
Celem jest zapoznanie się z używaniem transformat Fouriera
przy użyciu biblioteki FFTW.
Do zadania należy opracować raport z odpowiedziami i
komentarzami do poszczególnych punktów. Testy powinny być wykonane dla
conajmniej 3 wybranych obrazów. Program powinien ładować obrazek z
pliku i wyświetlać poza obrazkiem jego transformate Fouriera
(Dokładniej: kolejno a,b,r,f: dla z=a+bi=r[cos(f)+isin(f)] czyli części
rzeczywistą, urojoną, moduł i kąt fazowy).
Jak zmieni się transformata Fouriera obrazu gdy każdy element obrazu
pomnożymy przez (-1)^(m+n) ?
Zaimplementuj, sprawdź i odpowiedz jak zmieni się obrazek po wykonaniu
DFT (dyskretnej transformaty Fouriera) i IDFT(odwrotnej transformaty Fouriera)
gdy w przestrzeni widmowej każdy element
- zastąpimy częścią rzeczywistą
- zastąpimy częścia urojoną
- zastąpimy jego normą
- unormujemy (czyli pozostanie tylko faza)
- zastąpimy jego sprzężeniem (zamiast a+ib: a-ib)
- zastąpimy a+ib przez 0.25a+ib
- mnożymy (a+ib) przez m^2+n^2 (można dodać skalowanie)
- wyzerujemy gdy nie jest w kwadracie rozmiaru K=50, o środku w (0,0)
Prosty przykład zastosowania FFTW znajduje się w katalogu
examples1. Operacje należy zaimplementować tak aby
były osiągalne dla załadowanego obrazu przy pomocy klawiszy lub prostego
menu.
Program należy zaprezentować osobiście na pracowni oraz wysłać
spakowany kod źródłowy na adres e-mailowy prowadzacego pracownie
z tematem POLab02.
- Ćwiczenia 25.III.2009: transformaty Fouriera (18pkt)
Lista zadań nr 1 (pdf)
Na ćwiczenia należy zadeklarować zrobione zadania, za co są przyznawane
punkty. Osoba poproszona o zrobienie przy tablicy zadania w przypadku gdy
nie będzie potrafiła go zrobić mimo zadeklarowania dostaje punkty ujemne
w ilości minus trzykrotność ilości punktów za dane zadanie.
- Pracownia 1-8.IV.2009: pluginy do GIMP'a + filtry
-
Celem pierwszego zadania jest zapoznanie się z pisaniem pluginów do GIMP'a
Proste przykłady do skompilowania i uruchomienia są dostepne w
katalogu: examples1:
examples1/gimp_simple i
examples1/gimp_dialog.
Należy zaimplementować na tej bazie w postaci pluginów
własny wybrany filtr, który coś robi z obrazem oraz
podłączyć transformate Fouriera z biblioteki FFTW np.
zamieniając obraz na moduł transformaty F. obrazu.
-
Zaimplementować następujące filtry liniowe:
- filtr prostokątny (Box) o sparametryzowanym rozmiarze
- filtr dwumianowy o sparametryzowanym rozmiarze
- dowolny filtr wykrywający krawędzie
na cztery sposoby jeśli tylko to możliwe:
- dyskretny splot 2D z definicji
- dwukrotny splot dyskretny 1D, dla separowalnych filtrów
- splot 2D przy pomocy FFT
- dwa sploty 1D korzystając z FFT, dla separowalnych filtrów
Dla różnych rozmiarów filtra przeprowadzić analize, która implementacja
jest najszybsza ? Zbadać działanie filtrów dla przykładowych zdjęć i
dla obrazu testowego zawierającego koncentryczne fale o rosnącej
częstotliwości. Izotropowość ? Opcjonalnie można przetestować własną
metodę przyspieszenia obliczeń np. przez zmiany kolejności dostępu
do pamięci. Zadanie można zaimplementować jako osobny program lub
jako plugin do gimpa (z dialogiem wyboru metody i parametrów).
Wyniki przedstawic w krótkim raporcie w postaci
tekstowej, w tex'u lub w formacie pdf.
- Pracownia 22.IV-6.V.2009: przekształcenia geometryczne
Do wyboru:
- Image morphing Dla dwóch obrazów np. twarzy skonstruować
płynne przejście między nimi. Metoda powinna być interakcyjna i bazować
na wprowadzeniu pewnej ilości par punktów charakterystycznych
odpowiadających w obu
obrazach. W ten sposób dla każdego punktu charakt. mamy wektor przesunięcia.
Dla każdego punktu obrazu należy go przesunąć o sumę przesunięć dla
wszystkich podanych punktów charakt.(praktycznie punktów z okolicy) przy czym
każde przesunięcie jest skalowane przez wagę która wynika z odległości
do każdego z tych punktów. Dla każdego punktu charakt. rozmiar filtra
wynika z odległości do najbliższego innego punktu charakter.
Wartościa filtra w 0 jest 1 dzięki czemu mamy dokładnie pożądane
przesunięcie dla punktów charakt. a na jego brzegu 0.
Jako filtr prosze wypróbowac stożek i/lub gaussian.
Dla zrealizowania przejścia między obrazami wystarczy przeskalować
przesunięcia przez lambde od 0 do 1 i odpowiednio liniowo zmieszac kolory
co wystarczy do animacji płynnego przejścia.
Można udoskonalić metodę np. aby działała lepiej także dla punktów
rozmieszczonych z różną gęstością. Przeprowadzić eksperymenty na
różnych przykładach.
- Dystorsja i lupa
Zaimplementować dwa przekształcenia geometryczne: dystorsję i lupę
powiększającą fragment obrazu i rozciągającą odpowiedno reszte. Dla
obu przekształceń należy umożliwić zmiany parametrów (wsadowo lub
lepiej interaktywnie) i porównać metody próbkowania: najbliższego
sąsiada, dwuliniową i ewentualnie dodatkowo własną z
filtrowaniem. Zadanie należy oddać z przykładami zastosowania w
szczególności dla jednego zdjęcia z dystorsją należy tak dopasować
parametry aby ją usunąć.
Uwagi i objaśnienia:
Oba przekształcenia zmieniają odległości pikseli od środka obrazu (dla dystorsji) lub od środka obszaru zainteresowania (dla lupy). Dla dystorsji
można zastosować model z wykładu z funkcją do skalowania punktów :
f(r) = 1 + a_1*r^2 + a_2*r^4
Dla lupy taką funkcje trzeba skonstruować z następujących założeń:
- dla r>A funcja nie zmienia obrazu tzn f(r)=1
- dla r=0 funkcja powieksza B-razy tzn f(0)=B
- f(r) jest klasy C^1 tzn. ciągła i pochodna też ciągła
Przykładem takiej funkcji dla A=1 (na przedziale gdzie nie jest stala) może byc np.
f(r) = 1 + (B-1) * (2*r^3 - 3*r^2 + 1)
Ponieważ po przekształceniu odległość zmienia sie z r na f(r)*r
dobrze by zadbać aby ta funkcja była rosnąca co ogranicza z góry parametr B.
Można też zbadać efekty które powstają dla większych wartości B.
Pochodna funkcji f(r)*r podaje nam lokalne skalowanie co można
wykorzystać do próbkowania.
- Projekt końcowy, terminy: 27.V.2009, 10.VI.2009:
W terminie 27.V należy przedstawić stan pracy nad wybranym projektem
i wybrane metody. Termin 10.VI.2009 jest ostatecznym terminem oddania
gotowego projektu. Poniżej przedstawione są propozycje do wyboru,
do 20.V można się kontaktować z prowadzącym w sprawie własnej propozycji.
Program powinien być
dopracowany i poza prostym ale czytelnym interfejsem powinien
zawierać krótki opis działania w postaci pliku tekstowego lub PDF.
Minimalny interfejs to wywołanie z linii poleceń z nazwami kilku
plików graficznych, ale to tylko w przypadku braku czasu jeśli tylko
reszta programu sie obroni. Wraz z programem należy dostarczyć minimum
3 przykłady.
- Separacja planów (foreground extraction) i wklejanie osób na
pole tulipanów (tak aby część była z przodu, a część z tyłu)
i dla kilku innych wybranych przykładów.
Można zastosować algorytm opisany w pracy
GrabCut (Siggraph 2004) i skorzystac z implementacji algorytmu
GraphCut. Program można napisać jako plugin do gimpa lub osobną
aplikacje. Na wejściu
powinna być zaznaczona maska/maski np. z zaznaczonymi przykładowymi
pikselami z
planu przedniego i tylnego (użytkownik grubym pędzlem maluje jedna kreskę
na dole dla przedniego planu i drugą na górze innym kolorem dla tła).
Jeśli czas działania będzie za duży
można przeskalować przykładowe obrazki.
- Jeśli ktoś w między czasie zaczął myśleć nad lepszym rozwiazanie
problemu morphingu z zadania poprzedniego to można także zrealizować
np. przy pomocy
lini, triangulacji i/lub bardziej zlozonych funkcji. Duża dowolność
należy poszukać właściwego rozwiązania, do uzgodnienia.
|