Przetwarzanie obrazów

Wykład:
Konsultacje:



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


Program wykładu 2009

Przykładowe zagadnienia:

  1. Wstęp i przegląd bibliotek
  2. Reprezentacje przestrzenne i widmowe
  3. Transformaty Fouriera
  4. Sposoby pozyskiwania obrazów
  5. Przekształcenia geometryczne
  6. Przekształcenia pikseli
  7. Zastosowania histogramów
  8. Filtry liniowe i nieliniowe
  9. Modele szumu i jego usuwanie
  10. Dylacja i erozja
  11. Rejestracja
  12. Segmentacja
  13. Synteza tekstur
  14. Fotografia obliczeniowa
  15. Kolory, odległości obrazów, profile urządzeń ICC

Literatura:

  1. B.Jahne - "Digital Image Processing", 5th edition, Springer-Verlag 2002.
  2. T. Pavlidis, Grafika i przetwarzanie obrazów, WNT, Warszawa 1987.
  3. R.C.Gonzales, R.E.Woods - "Digital Image Processing", 2nd edition, Prentice Hall 2002.
  4. W.K.Pratt - "Digital Image Processing", 3rd edition, John Wiley & Sons 2001.

Linki:

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).
  1. 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.
    1. 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.
    2. 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.
    3. 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.
    4. Zapoznać sie z programem Gimp i działaniem przekształceń w menu narzędzia kolorów: poziomy(levels), krzywe(curves).
    5. 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.
    6. 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).

  2. 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

    1. zastąpimy częścią rzeczywistą
    2. zastąpimy częścia urojoną
    3. zastąpimy jego normą
    4. unormujemy (czyli pozostanie tylko faza)
    5. zastąpimy jego sprzężeniem (zamiast a+ib: a-ib)
    6. zastąpimy a+ib przez 0.25a+ib
    7. mnożymy (a+ib) przez m^2+n^2 (można dodać skalowanie)
    8. 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.

  3. Ć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.

  4. Pracownia 1-8.IV.2009: pluginy do GIMP'a + filtry
    1. 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.
    2. Zaimplementować następujące filtry liniowe:
      1. filtr prostokątny (Box) o sparametryzowanym rozmiarze
      2. filtr dwumianowy o sparametryzowanym rozmiarze
      3. dowolny filtr wykrywający krawędzie
      na cztery sposoby jeśli tylko to możliwe:
      1. dyskretny splot 2D z definicji
      2. dwukrotny splot dyskretny 1D, dla separowalnych filtrów
      3. splot 2D przy pomocy FFT
      4. 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.

  5. Pracownia 22.IV-6.V.2009: przekształcenia geometryczne
    Do wyboru:
    1. 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.

    2. 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ń:

      1. dla r>A funcja nie zmienia obrazu tzn f(r)=1
      2. dla r=0 funkcja powieksza B-razy tzn f(0)=B
      3. 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.

  6. 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.

    1. 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.
    2. 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.

Andrzej Łukaszewski (anl(at)ii.uni.wroc.pl)