自动加亮图像

时间:2018-12-31 12:35:15

标签: image matlab image-processing rgb brightness

我发现此代码可将图像自动变亮至最佳水平。

% 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 :(得分:1)

  

我想问一下,为什么my_limit的值为0.5?我们如何确定   价值吗?

每个通道的色彩空间NTSC范围从0到1。因此,基本上0.5是中心。这相当于为RGB空间选择127

  

为什么要使用“ ntsc”色彩空间而不是hsv等其他色彩空间,   实验室还是yCbCr?

我相信ntsc可以提供100%的色彩空间覆盖率,因此代码的作者选择了它。但是,大多数现代系统不会在此颜色空间中显示,因此我们使用标准RGB进行显示。我使用这个网站得出了这个结论NTSC color space

也如Cris在此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);