Чи можна підробити розмиття за допомогою зображень?


9

Я використовую libGDX для андроїд гри; Наскільки я можу сказати, він не має API для розмивання.

Читаючи у Вікіпедії, здається, що розмиття утворюється шляхом встановлення для кожного пікселя значень RGB середнім значенням усіх сусідніх значень. Що не здається легко можливим у libGDX - налаштування піксельних даних.

Отже, моє питання просте:

Чи можна підробити (пристойне) розмиття, використовуючи лише зображення?

Я потенційно можу накладати кілька зображень (за кількістю, прозорістю, типом); але чи можу я створити переконливу розмитість на зразок цього?

Мені спокуса сказати «ні», але, можливо, хтось інший досяг чогось подібного. Для наочності я хочу набір 1+ загальних зображень, які я можу відображати поверх будь-якого зображення для створення ефекту, що нагадує розмиття.


Хороше питання! Я думав про те саме, сам!
Даніель каже, що повернеться до Моніки

@DantheMan на якій платформі?
ashes999

Unity3d або мовою затінення CG.
Даніель каже, що повернеться до Моніки

Ви пропонуєте накладати прозорі зображення один на одного. Якщо ви трохи їх компенсуєте, ви збираєтесь усереднювати пікселі, досягаючи розмитості
Джефф

1
@ ashes999, якщо ви шукаєте "магічне зображення", яке може бути накладене на речі, щоб зробити їх розмитими, цього не існує. Альфа-змішування (накладення) - це не те саме, що розмиття, вибачення.
Натан Рід

Відповіді:


7

Якщо ви в змозі додатково поєднувати зображення та помножувати їх на постійне значення, тоді ви можете робити розмиття. Замість того, щоб усереднювати пікселі по сусідству, ви мали б в середньому кілька копій зображення, зміщених невеликою кількістю пікселів один від одного. Або, загалом, ви можете зробити розмиття Гаусса або будь-який вид розмиття, керуючи вагами, тобто множивши кожну зміщену копію зображення на постійну, коли вона додається до решти.

Алгоритмічно це виглядатиме приблизно так:

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

Ви б використовували ті ж зміщення та ваги, що і у стандартному способі розмиття. В Інтернеті є чимало статей про те, як створити ваги для гауссової розмитості, наприклад.


+1 приємна відповідь. У моєму випадку я не маю адитивної здатності.
ashes999

0

Розмивання може бути дорогою операцією, можливо, може підійти інший підхід, наприклад:

  1. Зберігайте кілька копій розмитого зображення в декількох різних напрямках (наприклад, кратні 45 градусів), а потім відображайте найближче відповідне зображення під час виконання. Це дозволить забезпечити найвищу продуктивність за рахунок використання пам'яті.
  2. Масштабуйте зображення вниз, а потім поверніться до повного розміру, використовуючи антизгладжування / розгладження Часто це можна зробити з графічним обладнанням з дуже невеликим впливом на продуктивність.

Це не спрацює, тому що воно повинно бути динамічним, тобто я не можу точно знати налаштування екрана достроково.
ashes999
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.