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


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.