Вилами по воде писано - Playing poohsticks in the Styx — LiveJournal
Jun. 11th, 2016
02:41 pm - Вилами по воде писано
Развлекаясь с графическими алгоритмами в попытках минимизировать растискивание в верхних частях букв, я придумал нечто простое до банальности, но ранее мной не виданное. Последовательное применение алгоритма дает забавный эффект затухающих "кругов" на воде.
Для каждого пикселя находим минимум и максимум яркости в окрестности данного радиуса, включая этот пиксель, а также среднее арифметическое яркости в этой окрестности, исключая этот пиксель. Новое значение пикселя=минимум+максимум-среднее.
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
Я начинал со среднего арифметического с увеличенным контрастом, а потом в порядке предъявления (== случайном). Если делать в порядке возрастания MSE от исходного среднего по всей картинке - получается жирновато. Пробовать делать в порядке возрастания MSE от текущего, хоть по всей картинке, хоть weighted, лень, потому что квадратично выйдет. Надо бы, конечно, написать и попробовать на ночь запустить.
У нас есть квадратные пиксели со стороной 1 со значениями, скажем, из [0;1], и нам нужно найти минимум и максимум в данной окрестности. Если окрестность определена как область, захватывающая или пиксель целиком, или не захватывающая совсем, то это просто. А если окрестность произвольная, в которую могут попадать части пикселей - скажем, круг радиуса 1.5 (вписанный в квадрат со стороной 3). В него попадают, кроме центрального пикселя, N, S, W, E с весом 0.9717 и NE, SE, NW, SW с весом 0.5454.
Тогда один из вариантов считать максимум равным максимуму взвешенных значений (а можно и взвешенному среднему плюс максимум взвешенного отклонения), и минимум, соответственно, как 1 минус какой-нибудь "максимум" инвертированных значений.
Any ideas?
Ты не хочешь поделиться кодом, публично или частным образом?
Попробовал сводить, следуя spanning tree - получается в общем красиво, но менее четко, чем при инициализации средним значением.