Czy można sfałszować rozmycie za pomocą obrazów?

9

Używam libGDX do gry na Androida; o ile wiem, nie ma interfejsu API do rozmycia.

Czytając w Wikipedii, wydaje się, że rozmycie powstaje przez ustawienie wartości RGB każdego piksela na średnią wszystkich sąsiednich wartości. Co nie wydaje się łatwe w libGDX - ustawianie danych pikseli.

Więc moje pytanie jest proste:

Czy można sfałszować (przyzwoitą) rozmycie przy użyciu samych zdjęć?

Potrafię potencjalnie nałożyć wiele obrazów (pod względem liczby, przezroczystości, typu); ale czy mogę stworzyć tak przekonującą rozmycie?

Kusi mnie, by powiedzieć „nie”, ale może ktoś inny osiągnął coś podobnego. Dla jasności chcę mieć zestaw ponad 1 ogólnych zdjęć, które mogę renderować na DOWOLNYM obrazie, aby wygenerować efekt rozmycia.

ashes999
źródło
dobre pytanie! Sam o tym myślałem!
Daniel mówi Przywróć Monikę
@DantheMan na jakiej platformie?
ashes999
Unity3d lub język cieniowania CG.
Daniel mówi Przywróć Monikę
Sugerujesz nałożenie na siebie przezroczystych obrazów. Jeśli je nieznacznie zrównoważysz,
Jeff,
1
@ ashes999, jeśli szukasz „magicznego obrazu”, który można nałożyć na rzeczy, aby wyglądały na rozmyte, to nie istnieje. Przykro nam, mieszanie alfa (nakładanie) nie jest tym samym, co rozmycie.
Nathan Reed,

Odpowiedzi:

7

Jeśli możesz dodawać obrazy i pomnożyć je przez stałą, możesz rozmazać. Zamiast uśredniać piksele w sąsiedztwie, uśredniłbyś kilka kopii obrazu przesuniętych o niewielką liczbę pikseli od siebie. Lub bardziej ogólnie, można wykonać rozmycie gaussowskie lub jakiekolwiek inne rozmycie, kontrolując wagi - to znaczy, mnożąc każdą przesuniętą kopię obrazu przez stałą, gdy jest on dodawany do pozostałych.

Algorytmicznie wyglądałoby to tak:

clear output_image to 0
foreach offset, weight in filter_kernel:
    output_image += input_image * weight, shifted by offset

Użyłbyś takich samych przesunięć i ciężarów jak w standardowym sposobie robienia rozmycia. Na przykład w Internecie jest wiele artykułów na temat generowania wag dla rozmycia gaussowskiego.

Nathan Reed
źródło
+1 fajna odpowiedź. W moim przypadku nie mam zdolności addytywnej.
ashes999
0

Rozmycie może być kosztowną operacją, być może może działać inne podejście, np .:

  1. Przechowuj wiele kopii obrazu zamazanych w kilku różnych kierunkach (np. Wielokrotności 45 stopni), a następnie wyświetlaj najbliższe pasujące zdjęcie w czasie wykonywania. Zapewni to najwyższą wydajność, kosztem użycia pamięci.
  2. Skaluj obraz w dół, a następnie z powrotem do pełnego rozmiaru z wygładzaniem / wygładzaniem. Często można to zrobić za pomocą sprzętu graficznego o bardzo niewielkim wpływie na wydajność.
Luke Van In
źródło
To nie zadziała, ponieważ musi być dynamiczne, tzn. Nie mogę z góry dokładnie określić ustawień ekranu.
ashes999