Автоосветление изображений - PullRequest
0 голосов
/ 31 декабря 2018

Я нашел этот код для автоматического осветления изображений до оптимального уровня.

% AUTOBRIGHTNESS  
%        -->Automatically adjusts brightness of images to optimum level.
%    e.g. autobrightness('Sunset.jpg','Output.jpg')

function autobrightness(input_img,output_img)
my_limit = 0.5;
input_image=imread(input_img);
if size(input_image,3)==3 
    a=rgb2ntsc(input_image);
else     
    a=double(input_image)./255;
end
mean_adjustment = my_limit-mean(mean(a(:,:,1)));
a(:,:,1) = a(:,:,1) + mean_adjustment*(1-a(:,:,1));
if size(input_image,3)==3    
    a=ntsc2rgb(a);
end
imwrite(uint8(a.*255),output_img);
  1. Я хочу спросить, почему значение my_limit равно 0,5?
  2. Как мы определяем это значение?
  3. Зачем использовать цветовое пространство 'ntsc' вместо другого цветового пространства, такого как hsv, lab или yCbCr?

1 Ответ

0 голосов
/ 31 декабря 2018

Я хочу спросить, почему значение my_limit равно 0,5?Как мы определяем это значение?

Цветовое пространство NTSC варьируется от 0 до 1 для каждого его канала.Таким образом, по сути 0,5 является центром.Это эквивалентно выбору 127 для пространства RGB

Зачем использовать цветовое пространство 'ntsc' вместо другого цветового пространства, такого как hsv, lab или yCbCr?

Я считаю, что ntsc предоставляет 100% покрытия цветового пространства и поэтому автор кода выбирает его.Однако большинство современных систем не отображают в этом цветовом пространстве, и поэтому мы используем стандартный RGB для отображения.Я использовал этот сайт, чтобы прийти к такому выводу Цветовое пространство NTSC

Также, как указал Крис на этой странице wikipedia .NTSC хранит яркость и цветность, а автор кода настраивает яркость (яркость).Я включаю модифицированный скрипт, который я использовал, чтобы прийти к этим выводам

input_img='lena_std.tif'
output_img='lena2.tif'
my_limit = 0.5;
input_image=imread(input_img);
if size(input_image,3)==3 
    a=rgb2ntsc(input_image);
    k=rgb2ntsc(input_image);
else     
    a=double(input_image)./255;
end
mean_adjustment = my_limit-mean(mean(a(:,:,1)));
a(:,:,1) = a(:,:,1) + mean_adjustment*(1-a(:,:,1));
if size(input_image,3)==3    
    a=ntsc2rgb(a);
end
imwrite(uint8(a.*255),output_img);
output=uint8(a.*255);
imwrite(uint8(k.*255),'test.tif');
ntscoutput=uint8(k.*255);
...