用MATLAB了解数码相机的直方图

本文讨论了由高端相机生成的数码相机直方图的重要性,它有助于生成更好的图片。除了对直方图的一般性讨论外,还为核心程序员提供了相同的MATLAB实现。

直方图是尼康、佳能等现代相机的一个优秀功能。不幸的是,很少有人知道如何充分利用直方图。通过理解直方图,我们甚至可以在拍摄之前就预测它会有多好。

高端相机的LCD屏幕

图中是一个典型的高端相机的LCD屏幕。相机的控制菜单如图2所示。在控制菜单的右上角有一个标记为直方图的黑框,它显示了大多数相机用户认为无用的波形。但是,如果我们理解了这种波形,我们就可以完美地点击我们的图片,而不会后来才意识到亮度或照明很差。


图像直方图

图像的直方图是图像中各灰度级出现频率的图形表示。要清楚地理解这句话,首先必须理解灰度的含义:

图象以矩阵的形式存储在计算机中。图像的每个像素表示该点的强度值。这个强度值被称为它的灰度。因此,如果一个点是暗的,它的强度(灰色)值是零。如果它是最亮的,它的强度值是255。因此,以矩阵形式存储在计算机中的图像的值从0到255不等。例如,电脑中女神在我们电脑中以矩阵的形成存在:

新垣结衣
女神
图像矩阵
女神的本质

图中所示矩阵中的值为图像的灰度值。例如,9接近于0,它对图像的贡献将是黑暗的。但是133是一个高得多的值,所以它对图像的贡献将是明亮的。

直方图将这些灰度级的出现(频率)绘制在y轴上,而x轴将0到255的灰度级值绘制在x轴上:

女神本质的直方图

可以看到,灰度值总体都集中在100以下,因为整张图片实际上都很暗,但面部是比较亮的,所以在200-250范围内也有一定的分布。

从直方图中可以看出,y轴对应于x轴上显示的某个特定灰度值出现的次数。如果我们进一步概括这一讨论,我们可以得出这样的结论:

  • 如果一幅图像几乎是暗的,那么它的直方图将会朝向图的左边。
  • 而对于非常亮的图像,它将会朝向图的最右边。但是如果一幅图像是均匀明亮的,那么它的直方图从左到右将是均匀的。

软件程序

MATLAB程序在这里用来创建一个图像的直方图。虽然我们在MATLAB中有一个内建的函数来做这个工作,但是整个想法是要详细理解直方图的概念。只有这样,我们才能优化代码,使其更快地为下一代高端相机工作。MATLAB代码如下:


y=imread('要读取图片的路径');

[m,n,num_colors]=size(y);
if num_colors> 1
x1=rgb2gray(y);
x=double(x1);
else
x=double(y);
end

counter=zeros(256,1);
for i=1:size(x,1)
  for j=1:size(x,2)
    for k=0:255
      if(x(i,j)==k)
        counter(k+1)=counter(k+1)+1;
      end
    end
  end
end

bar(counter,0.00001),title
(‘HISTOGRAM’);

在编译代码之前,需要在代码中提供图像的路径。在MATLAB中编译并运行代码时,将得到图像文件的直方图。






公众号

关注公众号,获取一手资讯

“ 用MATLAB了解数码相机的直方图 ” comments 0

评论/回复

电子邮件地址不会被公开。 必填项已用*标注