Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Алгоритм уровней. [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]

Гугл тебя не понял. Я тоже ;(


Наверх

Титульная страница Поиск, карта сайта Написать письмо