algorytm.org

Anaglify - tworzenie obrazów 3D



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Anaglify - tworzenie obrazów 3D
Ocena użytkowników:***** / 19
SłabyŚwietny 
Wpisany przez Tomasz Lubiński, 24 lutego 2009 18:25

Anaglif jest to obraz, który oglądany przez specjalne okulary (czerwono-niebieskie, czerwono-zielone bądź czerwono-turkusowe) daje wrażenie oglądania obiektu trójwymiarowego. Konwersja obrazów do postaci anaglifu jest konwersją stratną - tracimy częściową informację o kolorach. By odpowiedzieć sobie na pytanie dlaczego tak się dzieje i jak go wykonać przeanalizujmy najpierw dlaczego człowiek widzi w sposób trójwymiarowy.
Otóż wrażenie widzenia przestrzennego powstaje w mózgu na skutek analizowania różnić w obrazie z oka lewego i oka prawego. Każde z naszych oczu odbiera obraz nieco inny, gdyż widzi przedmioty pod nieco innym kątem. Dwa obrazy poniżej ukazują "dmuchawiec". Lewy obraz pokazuje go w taki sposób jak widzi go oko lewe, natomiast prawy tak jak widzi go oko prawe.

Obraz oka lewego   Obraz oka prawego


W pierwszej chwili może wydawać się, że oba obrazy są identyczne, jednak zawierają one subtelne różnice, które pozwalają nam widzieć przestrzennie. Zdjęcia takie można uzyskać używając szyny nakładanej na statyw, lub specjalnych aparatów fotograficznych o dwóch obiektywach. Różnice w obrazach można dostrzec pokazując raz jeden raz drugi obraz, tak jak widać to poniżej.

wrażenie trójwymiarowości


Już na przykładzie powyżej można odnieść delikatne wrażenie trójwymiarowości. Teraz zastanówmy się jak sprawić by oglądany obraz był rzeczywiście trójwymiarowy. Oczywiście trzeba sprawić by lewe oko widziało lewy obraz a prawe oko prawy obraz. Do tego posłużą nam okulary i zastosowane w nich filtry: czerwony (oko lewe) oraz niebieski bądź zielony (oko prawe). Wykorzystamy tutaj dwa spostrzeżenia:

  • filtr czerwony ma taką właściwość, że przepuszcza tylko barwę czerwoną, analogicznie filtr niebieski tylko barwę niebieską,
  • każdy obraz może być przedstawiony za pomocą 3 barw składowych: czerwonej, zielonej oraz niebieskiej (model RGB).


Oznaczymy składowe barw obrazu dla oka lewego poprzez: Lr (składowa czerwona), Lg (składowa zielona), Lb (składowa niebieska), analogicznie obraz dla oka prawego Rr, Rg, Rb oraz anaglif czyli wynikowy obraz trójwymiarowy Ar, Ag, Ab.


Tworzenie anaglifu monochromatycznego:

Zamienimy obrazy na odcienie szarości lecz w obrazie oka lewego pokażemy tylko składową barwy czerwonej, natomiast w obrazie oka prawego składowe barwy zielonej i niebieskiej. Do przekształcenia obrazu kolorowego w monochromatyczny użyjemy wzoru na luminancję w modelach barw używany w telewizji.
Dla obrazu oka lewego:
składowa czerwona = 0.299 * Lr + 0.587 * Lg + 0.114 * Lb
składowa zielona = 0
składowa niebieska = 0
Dla obrazu oka prawego:
składowa czerwona = 0
składowa zielona = 0.299 * Rr + 0.587 * Rg + 0.114 * Rb
składowa niebieska = 0.299 * Rr + 0.587 * Rg + 0.114 * Rb
Wyniki tych przekształceń przedstawione są poniżej:

Anaglif oko lewe   Anaglif oko prawe


Jeżeli teraz spojrzymy na te obrazy przez okulary, to jeżeli zamkniemy prawe oko to widzieć będziemy tylko lewy obraz - ten w odcieniach czerwieni, obraz po prawej zostanie całkowicie lub prawie całkowicie (w zależności od jakości filtrów okularów) odfiltrowany. Analogicznie dla drugiego oka, widzieć będziemy tylko obraz po prawej. By uzyskać anaglif brakuje nam teraz ostatniego kroku - połączenia obrazów w jeden - czyli dodania do siebie obu obrazów dla oka lewego i prawego. Zatem przekształcenie obu obrazów do anaglifu monochromatycznego możemy przedstawić następująco:
Ar = 0.299 * Lr + 0.587 * Lg + 0.114 * Lb
Ag = 0.299 * Rr + 0.587 * Rg + 0.114 * Rb
Ab = 0.299 * Rr + 0.587 * Rg + 0.114 * Rb
Wynik tego przekształcenia jest następujący:

Anaglif monochromatyczny



Tworzenie anaglifu - algorytm Photoshop:

Tym razem nie będziemy już przedstawiać kolejnych kroków, ale zasadę i ostateczne wzory. Algorytm ten pozwala uzyskać anaglif kolorowy. Jego działanie jest bardzo proste. Do wynikowego obrazu bierzemy składową barwy czerwonej z obrazu dla oka lewego oraz składowe zieloną i niebieską z obrazu dla oka prawego. Całą operację można zapisać następującym wzorem:
Ar = Lr
Ag = Rg
Ab = Rb
Wynik tego przekształcenia jest następujący:

Anaglif algorytm Photoshop



Tworzenie anaglifu - zmodyfikowany algorytm Photoshop:

Wadą poprzedniego algorytmu jest branie wyłącznie składowej barwy czerwonej z obrazu dla oka lewego. Dla niektórych obrazów - takich które zawierają mało tej składowej efekt może być niezadowalający. Modyfikacja tego algorytmu polega na przekształceniu obrazu dla oka lewego do odcieni szarości przed zastosowaniem tego algorytmu. Wówczas wzór ulega modyfikacji do następującej postaci:
Ar = 0.299 * Lr + 0.587 * Lg + 0.114 * Lb
Ag = Rg
Ab = Rb
Wynik tego przekształcenia jest następujący:

Anaglif algorytm zmodyfikowany Photoshop



Tworzenie anaglifu - algorytm Dubois'a:

Ostatnią z przedstawionych będzie metoda zaproponowana przez Eric'a Dubois'a. Jest ona najbardziej zaawansowanym algorytmem, który do tworzenia składowych dla poszczególnych oczu bierze pod uwagę wszystkie składowe z obu obrazów. Sprawia to, ze kolory w tej metodzie są oddane najbardziej wiernie. Wzory na przekształcenie są następujące:
Ar = 0.4561 * Lr + 0.500484 * Lg + 0.176381 * Lb - 0.0434706 * Rr - 0.0879388 * Rg - 0.00155529 * Rb
Ag = -0.0400822 * Lr - 0.0378246 * Lg - 0.0157589 * Lb + 0.378476 * Rr + 0.73364 * Rg - 0.0184503 * Rb
Ab = -0.0152161 * Lr - 0.0205971 * Lg - 0.00546856 * Lb - 0.0721527 * Rr - 0.112961 * Rg + 1.2264 * Rb
Należy jeszcze sprawdzić czy wyniki składowych znajdują się w dopuszczalnych zakresach. Jeżeli nie to należy je do nich sprowadzić. Na przykład jeżeli zakres każdej składowej to 0 ... max to jeżeli wartość otrzymana według powyższych wzorów jest mniejsza od 0 to należy przyjąć 0, analogicznie jeżeli jest większa od max to należy przyjąć wartość maksymalną. Wynik tego przekształcenia jest następujący:

Anaglif algorytm Dubois'a

Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Tomasz LubińskiC/C++Borland Builder 6
.cpp
.cpp
***** / 8
Tomasz LubińskiDelphi/PascalBorland Delphi 5
.pas
.pas
***** / 3
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 30 lipca 2012 19:11
Komentarze
photo
+1 # Fazzer 2009-08-27 00:52
Super
Dzięki tego szukałem
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # Leszcz 2009-12-08 17:03
Super... ;]
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # asd 2010-07-03 00:30
superrrr
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # CanisLupus 2011-05-03 15:41
Jak uzuskać skłądowe limunancji w PS?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # volodia 2014-03-26 12:57
Autor napisał, że nie da się wniknąć w kod algorytmu, ale pewnie coś podobnego to tego co pokazywal sam autor (Ar = 0.299 * Lr + 0.587 * Lg + 0.114 * Lb) bo to w końcu oparte na percepcji oka.

Mam nadzieję że się nie mylę.
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz