по сути это продолжение из темы
http://crapware.aidf.org/forum/index.php?topic=2390.msg14982#msg14982 . но я там размечтался насчет мегафункционала по обработке изображения
. да, всё это будет лишним, и врядли ктото будет пользоваться всякими сепиями, чернобелым и тп.
но всеже есть процедура коррекции, которая значительно бы помогла в множестве ситуаций, и это какраз таки контраст. сильно не вникал как он там должен работать, прочитал пару статей, в редакторах както это всё сложно, и по сути нам ведь не нужно чтобы картинка стала красивее, нам нужно как можно точнее выделить нужные нам цвета в изображении.
немного поэкспериментировал, остановился на примитивном изменении контраста и яркости. меняя 2 параметра $mid и $k можно как увеличивать\уменьшать контраст, так и увеличивать\уменьшать яркость. $mid - это та середина яркости, от которой скрипт будет повышать яркость пикселей которые светлее этого самого $mid. и понижать яркость тех пикселей, которые темнее $mid. его значение от 0 до 255. $k - это то значение , на которое будет повышаться или уменьшаться (при отрицательном значении) яркость.
$x1=903
$y1=956
$x2=968
$y2=1003
$mid=147
$k=40
//=========================
print("start")
GETSCREEN($x1,$y1,$x2,$y2)
SCREENSHOTEX($x1,$y1,$x2,$y2)
FOR($y=$y1,$y<$y2+1)
FOR($x=$x1,$x<$x2+1)
$c= pxl($x,$y)
IF(((colorr($c)+colorg($c)+colorb($c))/3) > $mid)
$outr=colorr($c)+$k
$outg=colorg($c)+$k
$outb=colorb($c)+$k
IF($outr < $mid)
$outr=$mid
END_IF
IF($outg < $mid)
$outg=$mid
END_IF
IF($outb < $mid)
$outb=$mid
END_IF
else
$outr=colorr($c)-$k
$outg=colorg($c)-$k
$outb=colorb($c)-$k
IF($outr > $mid)
$outr=$mid
END_IF
IF($outg > $mid)
$outg=$mid
END_IF
IF($outb > $mid)
$outb=$mid
END_IF
END_IF
IF($outr < 0)
$outr=0
END_IF
IF($outg < 0)
$outg=0
END_IF
IF($outb < 0)
$outb=0
END_IF
IF($outr > 255)
$outr=255
END_IF
IF($outg > 255)
$outg=255
END_IF
IF($outb > 255)
$outb=255
END_IF
PXLREPLACE($x,$y,$x,$y,$c,COLORGEN($outr,$outg,$outb))
END_CYC
END_CYC
print("fin")
SCREENSHOTEX($x1,$y1,$x2,$y2)
halt
как это работает, примеры:
исходное изображение
[spoiler=немного больше яркости $mid=0 $k=40]
[/spoiler]
[spoiler=немного меньше яркости $mid=255 $k=50 (или $mid=0 $k=-50)]
[/spoiler]
[spoiler=немного больше контраста $mid=147 $k=25]
[/spoiler]
[spoiler=немного меньше контраста $mid=147 $k=-25]
[/spoiler]
так для чего же это всё нужно? покажу пару примеров.
пример Vint'a:
$mid=160 $k=255
$mid=170 $k=255
примеры с распознаванием чисел, не охота было искать где это применять, но вспоминаю, что часто отказывался от распознавания, в силу того, что колормид не мог отделить сами цифры от фона. но, как пример, покажу на капче, где кокраз таки при колормод 8, встречались иногда прострелы в контурах цифр.
капча
колормод 8
$mid=170 $k=255
$mid=190 $k=255
ну и применение без разделения на 2 цвета также должно помоч в некоторых ситуациях. например в игре "мастер гитары 2" (если ктото встречался с этой игрой), до того как ввели цвета грифов, оранжевая дорожка по цвету почти совпадала с движущейся фишкой. а когда всунули динамические изменения цветов грифа, никакой колормод не мог справится. я уверен, что данная процедура помогла бы в этой ситуации.
некоторые скажут - "так написал же скрипт, всунь в подпрограмму и пользуйся". но хотелось бы чтоб эта коррекция работала также быстро как и существующий колормод. изменение поочереди каждого пикселя это оооочень долго.
что думаете? поможет на деле чтото этоковое, или это снова я размечтался
?
по сути, правильно чередуя колормод яркость и контраст, можно выделить любой искомый цвет или диапазон цветов в картинке.