我找到了这个代码,自动亮图像到一个最佳的水平。
% 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?发布于 2018-12-31 17:04:02
我想问,为什么my_limit的值是0.5?我们是如何确定这个值的?
每个通道的颜色空间NTSC从0到1不等。实质上,0.5是中心。这相当于为RGB空间选择127。
为什么要使用'ntsc‘颜色空间而不是另一个颜色空间,如hsv、实验室或yCbCr?
我相信ntsc提供了100%覆盖的颜色空间,所以代码的作者选择它。然而,大多数现代系统不会在这个颜色空间中显示,因此我们使用标准的RGB来显示。我用这个网站得出了这个结论NTSC颜色空间
另外,正如Cris在这个维基百科页面中指出的那样。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);https://stackoverflow.com/questions/53987602
复制相似问题