0 / 0 / 0
Регистрация: 01.06.2010
Сообщений: 6

гамма-коррекция изображения

02.06.2010, 16:32. Показов 2627. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вчера запостил тут тему с просьбой о помощи в программе. )
В общем, я в программе разобрался и уже нашел как делать. Вот только возник вопрос: Как записать нелинейное изменение гаммы?

вот текст программы
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
program lab5;                    
uses    Graph,Crt;
const
        dy=600;  dx=600;
type
        Dim      = array[1..dx] of byte;
        DimPtr   = ^Dim;
        poi      = array[1..dy] of DimPtr;
var
        x,y,col,Driv,Mode    : integer;
        wordvalue            : word;
        Size,Xpal,Ypal       : word;
        Wx,Wy,seektiff       : longint;
        f                    : file;
        ImageFile1,Xmax,Ymax : string;
        po                   : poi;
 
PROCEDURE HeadRead;
const
   TH :array[0..3] of byte=(73,73,42,0);
var
   NumberofTag        : word;
   i,TagType,PoinTyp  : word;
   comp,PoinAdr       : longint;
   head,IFDInd,BegIFD : longint;
   TiffHead           : longint absolute TH;
 
begin
   BlockRead(f,head,4);        
   if head<>TiffHead then
     begin
        Writeln('error');
        Halt;
     end;
   BlockRead(f,BegIFD,4);
   Seek(f,BegIFD);                    
   BlockRead(f,NumberofTag,2);          
   IFDInd:=BegIFD+2;   
   for i:=1 to NumberofTag do
     begin
        BlockRead(f,TagType,2);
        case TagType of
          256: begin 
                  IFDInd:=IFDInd+8;
                  Seek(f,IFDInd);
                  BlockRead(f,Wx,4);
               end;
          257: begin 
                  IFDInd:=IFDInd+8;
                  Seek(f,IFDInd);
                  BlockRead(f,Wy,4);
               end;
          273: begin 
                  IFDInd:=IFDInd+2;
                  Seek(f,IFDInd);
                  BlockRead(f,PoinTyp,2); 
                  IFDInd:=IFDInd+2;
                  Seek(f,IFDInd);
                  BlockRead(f,comp,4);   
                  IFDInd:=IFDInd+4;     
                  Seek(f,IFDInd);         
                   if comp=1 then
                    BlockRead(f,seektiff,4)
                  else
                    begin
                       BlockRead(f,PoinAdr,4); 
                       Seek(f,PoinAdr);       
                         if PoinTyp=4 then      
                         BlockRead(f,seektiff,4)        
                       else               
                         begin                         
                            BlockRead(f,wordvalue,2);
                            seektiff:=wordvalue;
                         end;
                    end;
               end;
          else
            IFDInd:=IFDInd+8; 
        end; {case}
        IFDInd:=IFDInd+4;
        Seek(f,IFDInd);
     end; 
end;
 
Begin
 
 
   Chdir('D:\IMAGES');
   Clrscr;
     If Paramcount <> 0 then
     ImageFile1:=ParamStr(1)
   else
     begin
        Write('write filename');
        Readln(ImageFile1);
     end;
   if ImageFile1='' then
     ImageFile1:='mouseb.tif';
 
   Assign(f,ImageFile1);
   Size:=1;
   Reset(f,Size);
 
   if (ImageFile1='eagle.dat') then
     begin
        Wx:=180;
        Wy:=240;
        seektiff:=0;
     end
   else
     HeadRead;
   Seek(f,seektiff);
   for y:=1 to Wy do
     begin
        New(po[y]);
        BlockRead(f,po[y]^,Wx);
     end;
   Close(f);
 
   Driv:=VGA;
   Mode:=2;
   InitGraph(Driv,Mode,'D:\tp7\BGI');
   for y:=0 to 15 do
     begin
        SetRGBpalette(y,y*4,y*4,y*4);
        SetPalette(y,y);
     end;
 
   for y:=1 to Wy do
     for x:=1 to Wx do
       begin
          col:=po[y]^[x];
          col:=(col shr 4);
          PutPixel(x-1,y+25,col);
       end;
   OutTextXY(GetMaxX-200,GetMaxY-20,'Press any key  ');
   Str(GetMaxX+1,Xmax);
   Str(GetMaxY+1,Ymax);
   SetColor(15);
   OutTextXY(10,0,'     File  '+ImageFile1);
   OutTextXY(GetMaxX-220,0,'Resolution   - '
             +Xmax+' x '+Ymax);
   Str(Wx,Xmax);
   Str(Wy,Ymax);
   OutTextXY(GetMaxX-220,15,'Picture size - '
             +Xmax+' x '+Ymax);
 
   Xpal:=0;
   Ypal:=GetMaxY-30;
   SetColor(15);
 
    case of readkey
'+':
     for y:=1 to Wy do
     for x:=1 to Wx do
       begin
          col:=po[y]^[x];
          col:=(col shr 4);
          {тут должна быть формула, которая задает нелинейное изменение.}
          PutPixel(x-1,y+25,col);
       end;
'-'
     for y:=1 to Wy do
     for x:=1 to Wx do
       begin
          col:=po[y]^[x];
          col:=(col shr 3);
          {тут должна быть формула, которая задает нелинейное изменение.}
          PutPixel(x-1,y+25,col);
       end;
end;
readkey;
 
   CloseGraph;
 
End.

https://www.cyberforum.ru/cgi-bin/latex.cgi?col=k*{col}^{\gamma } https://www.cyberforum.ru/cgi-bin/latex.cgi? col- цвет палитры(у нас ч/б), https://www.cyberforum.ru/cgi-bin/latex.cgi?k-некий коэффициент гаммы, https://www.cyberforum.ru/cgi-bin/latex.cgi?\gamma-показатель гаммы.

собственно, у меня к вам 3 вопроса, уважаемые форумчане.
1) Как записать выше стоящую формулу так, чтобы не возникало ошибки?
2) Как задать коэффициент https://www.cyberforum.ru/cgi-bin/latex.cgi?k?
3) Что нужно добавить в оператор case(или ниже в программу?), чтобы при изменении показателя гаммы не закрывалась программа после совершенного одного действия(например, после нажатия "+" показатель гаммы изменяется, но уже нельзя его уменьшить, и наоборот)?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.06.2010, 16:32
Ответы с готовыми решениями:

Гамма - коррекция изображения
Здравствуйте. Нужно реализовать алгоритм гамма - коррекции изображения в оттенках серого. Формула следующая r = ( s / 255) ^ x * 255,...

Гамма коррекция
Испрашиваю вашего совета, гуру! ;-) Коллеги, у меня возник тупик следующего рода, работаю с видеокамерами, кадры которых...

Коррекция яркости изображения
Доброго времени препровождения на форуме! Наведите на мысль с чего и как начать: &quot;Разработать программу коррекции яркости путем...

1
0 / 0 / 0
Регистрация: 01.06.2010
Сообщений: 6
02.06.2010, 16:33  [ТС]
вот .tiff-файлы для обработки
Вложения
Тип файла: rar images.rar (393.0 Кб, 35 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2010, 16:33
Помогаю со студенческими работами здесь

Коррекция цвета rgb изображения
Подскажите пожалуйста как в matlab можно сделать коррекцию цвета цветного изображения без перевода в ч/б. Или подскажите где можно...

Линейная коррекция изображения по формуле
вот задача на C# и проблема скорей не в реализации, а в понимании задачи Что за Xмакс и Xмин? Это относится к конкретному...

Найти точку пересечения прямой и плоскости
найти точку пересечения прямой L плоскости гамма, а также угол между прямой L и плоскостью гамма You have to do it in Module (not in...

Гамма-функция и неполная гамма-функция
Возникла проблема с гамма функциями, задание выглядит так Есть две гамма-функции неполная и гамма-функция Нужно доказать, что ...

2-10 коррекция
хто має якісь накидки на 2-10 корекцію:)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru