Implementacja mapy głębokości obrazu


(invader92) #1

Witam. Jeden z moich projektów na uczelni to napisanie programu, który na podstawie wczytanego obrazka i  czarno białej mapy głobokości wypluje obrazek, który jest odpowiednio rozmyty (bardziej w czarnych miejscach mapy, mniej w jasnych). Problem w tym, zę tego typu zagadnienie w ogóle nie zostało nigdzie poruszone, a ja osobiście nie mam zielonego pojęcia jak się do tego zabierać.


(Frankfurterium) #2

Jeżeli dobrze rozumiem, mapa jest obrazkiem o rozmiarze identycznym jak obrazek bazowy. Sam podzieliłbym oba obrazy na X sektorów (w zależności od rozdzielczości i szczegółowości) i kolejno sprawdzał, czy na mapie w danym sektorze jest bardziej biało czy czarno (zwykłe zliczanie pikseli). Jeżeli czarno, to należałoby rozmyć analogiczny sektor obrazu bazowego. Nie podałeś, w jakim języku piszesz, więc nie da ci się poradzić konkretnej biblioteki graficznej, ale np. Java ma wbudowane narzędzia do rozpoznawania koloru pikseli i blurowania.


(invader92) #3

Język to C++.


(Frankfurterium) #4

 

A jaki to problem dla komputera? Nie musisz tego robić ręcznie, tylko odpowiednio rozplanować kilka forów. Jak bardzo zblurować obszar powie ci gęstość upakowania czarnych/białych pikseli. Rozwiązanie jest naiwne, ale dosyć proste do zaimplementowania.


(invader92) #5

Wiem, że to nie jest problem dla komputera. To jest problem wydajności, który implikuje problem mojej oceny końcowej :).

Podzieliłem paletę [0 - 255] na osiem równoogległych progów i dla [x,y]'owego pixela promień rozmycia jest równy wartości progu. Prawie to samo, co zaugerowałeś, z tym, że nie dla poszczególnych obszarów, a dla każdego pixela z osobna (aczkolwiek, jeżeli by założyć, że dany obszar sprowadzamy do obszaru 1x1, to tak, zrobiłem to, co zaproponowałeś).

 

W każdym razie, serdecznie dziękuję za zainteresowanie tematem.


(Airborn) #6

Rozmycie to splot macierzy obrazu z odpowiednią macierzą transformacji (dla rozmycia np. [1 2 1; 2 4 2; 1 2 1. W Twoim przypadku poeksperymentował bym z przemnożeniem całej macierzy filtru (albo tylko środkowego elementu) przez wartość z maski. Na końcu musisz tylko pamiętać o znormalizowaniu obrazu wynikowego.