Top.Mail.Ru
Вилами по воде писано - Playing poohsticks in the Styx — LiveJournal
? ?

Вилами по воде писано - Playing poohsticks in the Styx — LiveJournal

Jun. 11th, 2016

02:41 pm - Вилами по воде писано

Previous Entry Share Flag Next Entry

Развлекаясь с графическими алгоритмами в попытках минимизировать растискивание в верхних частях букв, я придумал нечто простое до банальности, но ранее мной не виданное. Последовательное применение алгоритма дает забавный эффект затухающих "кругов" на воде.



Для каждого пикселя находим минимум и максимум яркости в окрестности данного радиуса, включая этот пиксель, а также среднее арифметическое яркости в этой окрестности, исключая этот пиксель. Новое значение пикселя=минимум+максимум-среднее.

Comments:

[User Picture]
From:ramlamyammambam
Date:June 12th, 2016 01:33 am (UTC)
(Link)
Был такой вариант клеточного автомата, где N-тый цвет на каждом шаге съедает соседей N+1-го цвета. Типа камень-ножницы-бумага. Похожие картинки получались:

(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 12th, 2016 01:54 am (UTC)
(Link)
Помню такой. Да, есть некоторое сходство (у меня можно ликвидировать затухание, нормализуя яркость после каждого шага), но оно проявляется только на круге. Если взять реалистичное изображение, то оно размывается до какого-то предела и останавливается.
https://dl.dropboxusercontent.com/u/87466/lenna00.png
https://dl.dropboxusercontent.com/u/87466/lenna10.png
https://dl.dropboxusercontent.com/u/87466/lenna20.png
https://dl.dropboxusercontent.com/u/87466/lenna50.png
https://dl.dropboxusercontent.com/u/87466/lenna100.png
(Reply) (Parent) (Thread)
[User Picture]
From:fatoff
Date:June 12th, 2016 04:17 am (UTC)
(Link)
Почему юго-восточный полуостров?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 12th, 2016 06:18 am (UTC)
(Link)
Погрешности плавающей точки при создании круга (длина стороны квадрата четная, поэтому центр круга не в центре квадрата, и понеслась).
(Reply) (Parent) (Thread)
[User Picture]
From:anhinga_anhinga
Date:June 16th, 2016 03:29 am (UTC)
(Link)
Класс! А какая должна быть инициализация, чтобы это работало?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 16th, 2016 04:02 am (UTC)
(Link)
Инициализация чего? Это как конволюция, никаких данных, кроме окрестности пикселя, не требует.
(Reply) (Parent) (Thread)
[User Picture]
From:anhinga_anhinga
Date:June 16th, 2016 04:43 am (UTC)
(Link)
В смысле, с какой картинки надо начинать, - с любой, где достаточно контраста?
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:June 16th, 2016 05:06 am (UTC)
(Link)
А, ты про шрифт, а не про круги.

Я начинал со среднего арифметического с увеличенным контрастом, а потом в порядке предъявления (== случайном). Если делать в порядке возрастания MSE от исходного среднего по всей картинке - получается жирновато. Пробовать делать в порядке возрастания MSE от текущего, хоть по всей картинке, хоть weighted, лень, потому что квадратично выйдет. Надо бы, конечно, написать и попробовать на ночь запустить.

(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:June 16th, 2016 05:08 am (UTC)
(Link)
Ох, я така затуркана, така затуркана! Конечно, нет никаких ограничений. Я Ленну попробовал - тоже забавно идет волнами.
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:June 16th, 2016 04:04 am (UTC)
(Link)
Забыл одну деталь: видео - с ограничением: белое остается белым.
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:June 16th, 2016 06:29 pm (UTC)
(Link)
Кстати, у меня есть по поводу этого алгоритма вопрос, на который я не знаю "математически правильного" ответа.
У нас есть квадратные пиксели со стороной 1 со значениями, скажем, из [0;1], и нам нужно найти минимум и максимум в данной окрестности. Если окрестность определена как область, захватывающая или пиксель целиком, или не захватывающая совсем, то это просто. А если окрестность произвольная, в которую могут попадать части пикселей - скажем, круг радиуса 1.5 (вписанный в квадрат со стороной 3). В него попадают, кроме центрального пикселя, N, S, W, E с весом 0.9717 и NE, SE, NW, SW с весом 0.5454.
Тогда один из вариантов считать максимум равным максимуму взвешенных значений (а можно и взвешенному среднему плюс максимум взвешенного отклонения), и минимум, соответственно, как 1 минус какой-нибудь "максимум" инвертированных значений.
Any ideas?
(Reply) (Parent) (Thread)
[User Picture]
From:anhinga_anhinga
Date:June 18th, 2016 03:00 am (UTC)
(Link)
Я как-то уже разучился про такие вещи думать, не экспериментируя...

Ты не хочешь поделиться кодом, публично или частным образом?
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:June 18th, 2016 03:43 am (UTC)
(Link)
Я его сейчас зачищаю; может, на следующей неделе.
Попробовал сводить, следуя spanning tree - получается в общем красиво, но менее четко, чем при инициализации средним значением.
(Reply) (Parent) (Thread)