![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Алгоритм уровней. [D7, WinXP]
Maxim____ © (2004-11-20 01:29:00)Подскажите где найти, пишу в гоогл levels formula, levels rgb,
но ничего не находится. также впрочем и в рунете.
programania (2004-12-05 22:32:00) [1]>murtix
>Это работа крайних ползунков, а со средним (гаммой) как быть.
Гамму расчитать заранее в массив [0..255] of byte:
и использовать gamma[p0[x1]] вместо p0[x1]
function CalculateGamma(Gamma:Double;Value:Integer):Double;
begin
if Value>0 then result:=255* exp (Gamma * ln(Value/255))+0.5 else result:=0;
end;
PROCEDURE rGamm(var gamma:m255;z:integer);
var i: integer;
begin
//z=10..500
if z=0 then z:=100;
for i:=0 to 255 do gamma[i]:=trunc(CalculateGamma(100/z,i));
end;
У меня в photoPaint8 нет среднего ползунка,
но наверно это тоже самое, но только 2 диапазона.
А вообще я думаю лучше не дурить людям голову
уровнями и гистограммами а сделать кнопку auto-adjust
и растягивать диапазон яркости до предела 0..255
причем темную точку лучше не опускать больше чем
поднимать светлую иначе картинка заметно потемнеет.
murtix (2004-12-05 00:45:00) [2]>programania
Это работа крайних ползунков, а со средним (гаммой) как быть.
>Maxim____
Не молчи плз. скажи до чего дошел
programania (2004-11-28 01:36:00) [3]>Maxim____
>мне нужен классический алгоритм
не надо никакого алгоритма, просто
вычитаем начало старого диапазона,
умножаем на отношение диапазонов
и прибавляем начало нового диапазона:
//в массиве br получили яркость: (p0[x1]*28+p0[x2]*151+p0[x3]*76) shr 8;
//находим минимальную и максимальную:
maxS:=0; minS:=$FFFF;
for y:=1 to h do for x:=1 to w do begin
z:=br[y,x];
if z<minS then minS:=z;
if z>maxS then maxS:=z;
end;
maxN:=200; minN:=50;//новый диапазон любой 0..255
p:=(maxN+1-minN) * 256 div (maxS-minS); //отношение диапазонов
for y:=1 to h do begin
p0:=bj.scanline[y-1];
x1:=0; x2:=1; x3:=2;
for x:=1 to w do begin
s:=br[y,x]; //старая яркость
n:=(s-minS)*p div 256 +minN; //новая
k:=n*256 div s; //коэфициент изменения
z:=p0[x1]*k div 256; if z>255 then z:=255; p0[x1]:=z;
z:=p0[x2]*k div 256; if z>255 then z:=255; p0[x2]:=z;
z:=p0[x3]*k div 256; if z>255 then z:=255; p0[x3]:=z;
inc(x1,3); inc(x2,3); inc(x3,3);
end
end;
murtix (2004-11-26 20:16:00) [4]Может скинешь все в виде архива на мыло murtix@yandex.ru
разберемся
Maxim____ (2004-11-26 16:17:00) [5]народ! научите пользоватьмя гуглом,
нашёл всё про гамму, и формула простая.
но с точками ничего не понятно.
murtix (2004-11-24 00:46:00) [6]Меня тоже интересует этот вопрос по-моим наблюдениям :
при движении крайних ползунков например белого верхнего (Input Levels) происходит следующее : все точки (пикселы) цвет которых больше чем значение для данного ползунка приобретают белый цвет т.е.
if Color0 > ILW then Color0 := 255
else Color0 := K * Color0 + B;
ILW = Input Levels White
по-моему В = 0 всегда, а К > 1 и расчитывается из ILW
обычное линейное отображение
и т.д.
А работу среднего следует искать в так называемом Гамма
Maxim____ (2004-11-23 22:13:00) [7]да, а "стяжка" т.е. сужение гистограммы у меня вообще не получается.
никто никогда не писал уровней?
Maxim____ (2004-11-23 18:03:00) [8]могу только сказать что это растяжка гистограммы.
растяжка у меня более-менее получается, но хотелось бы плавнее,
мне нужен классический алгоритм.
подробнее ничего не знаю, поэтому и спрашиваю.
Fenik (2004-11-23 17:42:00) [9]А подробнее не можешь написать?
Maxim____ (2004-11-23 02:40:00) [10]смещение точки белого и точки чёрного
Maxim____ (2004-11-21 01:39:00) [11]Алгоритм уровней, цвето(скорее свето)коррекция такая,
в фотошопе она есть.
MBo (2004-11-20 09:06:00) [12]Гугл тебя не понял. Я тоже ;(