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ć.
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.
Język to C++.
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.
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.
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.