我发现此代码可将图像自动变亮至最佳水平。
% 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);
my_limit
的值为0.5? 答案 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);