по сути это продолжение из темы
http://crapware.aidf.org/forum/index.php?topic=2390.msg14982#msg14982 . но я там размечтался насчет мегафункционала по обработке изображения
![Cheesy :D](http://crapware.aidf.org/forum/Smileys/default/cheesy.gif)
. да, всё это будет лишним, и врядли ктото будет пользоваться всякими сепиями, чернобелым и тп.
но всеже есть процедура коррекции, которая значительно бы помогла в множестве ситуаций, и это какраз таки контраст. сильно не вникал как он там должен работать, прочитал пару статей, в редакторах както это всё сложно, и по сути нам ведь не нужно чтобы картинка стала красивее, нам нужно как можно точнее выделить нужные нам цвета в изображении.
немного поэкспериментировал, остановился на примитивном изменении контраста и яркости. меняя 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
как это работает, примеры:
исходное изображение
![](http://i.imgur.com/SV4M1Oq.png)
[spoiler=немного больше яркости $mid=0 $k=40]
![](http://i.imgur.com/ORNM1nG.png)
[/spoiler]
[spoiler=немного меньше яркости $mid=255 $k=50 (или $mid=0 $k=-50)]
![](http://i.imgur.com/TUjDqTS.png)
[/spoiler]
[spoiler=немного больше контраста $mid=147 $k=25]
![](http://i.imgur.com/RuKDlC1.png)
[/spoiler]
[spoiler=немного меньше контраста $mid=147 $k=-25]
![](http://i.imgur.com/DM0tiXt.png)
[/spoiler]
так для чего же это всё нужно? покажу пару примеров.
пример Vint'a:
![](http://i.imgur.com/kFC8tO2.png)
$mid=160 $k=255
![](http://i.imgur.com/VYVtINp.png)
$mid=170 $k=255
![](http://i.imgur.com/DKuK2SW.png)
примеры с распознаванием чисел, не охота было искать где это применять, но вспоминаю, что часто отказывался от распознавания, в силу того, что колормид не мог отделить сами цифры от фона. но, как пример, покажу на капче, где кокраз таки при колормод 8, встречались иногда прострелы в контурах цифр.
капча
![](http://i.imgur.com/xouifPc.png)
колормод 8
![](http://i.imgur.com/ONP0WPD.png)
$mid=170 $k=255
![](http://i.imgur.com/1KCslXW.png)
$mid=190 $k=255
![](http://i.imgur.com/2BnS0bg.png)
ну и применение без разделения на 2 цвета также должно помоч в некоторых ситуациях. например в игре "мастер гитары 2" (если ктото встречался с этой игрой), до того как ввели цвета грифов, оранжевая дорожка по цвету почти совпадала с движущейся фишкой. а когда всунули динамические изменения цветов грифа, никакой колормод не мог справится. я уверен, что данная процедура помогла бы в этой ситуации.
некоторые скажут - "так написал же скрипт, всунь в подпрограмму и пользуйся". но хотелось бы чтоб эта коррекция работала также быстро как и существующий колормод. изменение поочереди каждого пикселя это оооочень долго.
что думаете? поможет на деле чтото этоковое, или это снова я размечтался
![Cheesy :D](http://crapware.aidf.org/forum/Smileys/default/cheesy.gif)
?
по сути, правильно чередуя колормод яркость и контраст, можно выделить любой искомый цвет или диапазон цветов в картинке.