【精品博文】建立灰度直方图

(1)基本概念

如果将图像中像素的灰度级别看作是一个随记变量(概率论中学到的随记变量,对后续直方图均匀化的推到至关重要),则其分布的情况就可以用概率密度函数(PDF)来刻画和描述,即表现为灰度直方图(histogram),它表示图像中具有某种灰度级像素的个数,反映了每种灰度出现的频率。灰度直方图的横坐标是灰度级,纵坐标是该灰度级像素的个数(出现的频度),是图像基本的统计特性。

从基本概念中可知,直方图是一幅图像中各像素灰度值出现次数的统计结果,它只反映该图像中不同灰度值出现的次数(或频数),而未反映这一灰度值像素所在的位置,也就是说,直方图只包含了该图像中某一灰度值像素出现的概率,而丢失了其所在的位置信息。

(2)编码实现

MATLAB的图像工具箱提供了imhist函数来显示图像的灰度直方图,其语法形式如下:

imhist(I);

imhist(I,n);

[counts,x]=imhist(…);

其中,I是待计算灰度直方图的图像。参数n是指定的灰度级数目,对于灰度图像而言,默认情况下n为256,即0~255。对于二值图像而言,n为2,即0~1两个灰度级。若指定参数n,则会将所有灰度级均匀分布在n个小区间内,而非全部展开。返回值counts和x为直方图的数据向量和对应的灰度区间向量,我就理解为直方图的纵坐标向量和横坐标向量。

现成的函数可以调用固然方便,但会屏蔽内部实现机理和算法,也不便于以后移植,因此我决定以后的学习都尽量自己编写函数。虽然不太会matlab编程,但我相信也不难掌握。下面就开始自己编程建立灰度直方图。

I=rgb2gray(imread('2.jpg'));   %获取并转换成灰度图像      [m,n]=size(I);   %获得图像大小,m为行数,n为列数      k=m*n;   %总像素个数      y=zeros(1,256);   %用来存放灰度级统计结果数据的向量      for i=1:m          for j=1:n             y(I(i,j)+1) = y(I(i,j)+1) + 1;   %灰度级从0~255,而向量y的下标从1~256          end      end      subplot(1,2,1),imhist(I),title('Original Histogram');      subplot(1,2,2),bar(y),title('My Histogram');      clear

可以看到,从像素灰度级的分布来讲,两幅图几乎是一样的,但还有些小缺陷:

1.两个直方图的纵坐标刻度不一样,差了一个级别,因此乍看起来不太一样.

2.bar(y)函数的这一用法,默认横坐标的刻度范围为1~length(y),本程序中即1~256,这与灰度级的范围0~255有一个偏差,虽然对观察亮度分布及对比度之类的影响不大,但还是不够精确。

针对以上两个缺陷,改进的代码如下:

I=rgb2gray(imread('2.jpg'));    %获取并转换成灰度图像      [m,n]=size(I);    %获得图像大小,m为行数,n为列数      k=m*n;    %总像素个数      y=zeros(1,256);    %用来存放灰度级统计结果数据的向量      for i=1:m          for j=1:n             y(I(i,j)+1) = y(I(i,j)+1) + 1;    %灰度级从0~255,而向量y的下标从1~256          end      end      subplot(1,2,1),imhist(I),title('Original Histogram');      x=0:255;      subplot(1,2,2),bar(x,y),axis([0,255,0,140000]),title('My Histogram');      clear

(0)

相关推荐

  • 你了解HOG特征吗?

    作者:晟 沚 前  言 HOG特征在很多任务中都有应用,如行人检测,首先对输入的图片进行预处理,然后计算像素点的梯度值,然后形成梯度直方图,然后对blocks进行normalize,最后收集到HOG ...

  • HOG和SIFT图像特征提取简述

    前 言如今,计算机视觉的应用在生活中已随处可见,如人脸识别考勤门禁.全态识别过闸乘地铁等.之所以能大量应用,是因为能解决问题,其本质原理是在数学上找到了一种从具体图像转换到特定数学空间的方法.这里的特 ...

  • python+opencv图像处理(十五)

    直方图均衡 直方图均衡化是通过对图像的直方图进行修正来获得图像增强效果的方法,主要是进行对比度增强,就是让亮的更亮,暗的更亮. 1.灰度图像的直方图均衡 先上图看效果. 如图上标题所示,第一张是原图, ...

  • phython+opencv图像处理

    做了两天的直方图均衡,还差一点点,先把前面的发布出来,后面的再慢慢来吧 . 直方图均衡主要是用于增强动态范围偏小的图像. 它的基本思想是把原始图像的直方图变换为在整个灰度范围内均匀分布的形式,这样可以 ...

  • 机器视觉常用算法原理及 opencv 实现源码

    机器视觉常用算法原理及 opencv 实现源码

  • 在 Google Colab 中使用 OpenCV 进行图像处理简介

    重磅干货,第一时间送达 在这篇文章中,我们将实现如何使用 OpenCV 在 google colaboratory 中进行图像处理.为此,我们应该了解一些 Python 基础知识,下面给出的步骤将帮助 ...

  • 基于OpenCV的直方图匹配

    重磅干货,第一时间送达 如何为图像生成直方图,如何使直方图相等,最后如何将图像直方图修改为与其他直方图相似. 01. 什么是图像直方图? 在开始定义直方图之前,为简单起见我们先使用灰度图像,稍后再解释 ...

  • python+opencv图像处理(十四)

    图像直方图 1.灰度图像的直方图 灰度图像的直方图是灰度级和这种灰度级的概率之间关系的图形. 直接看图,下图中左侧是原图,右图为其直方图. 完整代码如下: import cv2 as cv impor ...

  • 【精品博文】干货|一个工科生的职业规划(转)

    我今年39岁了,25岁研究生毕业,工作14年,回头看看,应该说走了不少的弯路,有一些经验和教训.现在开一个小公司,赚的钱刚够养家糊口的.看看这些刚毕业的学生,对前景也很迷茫,想抛砖引玉,谈谈自己的看法 ...

  • Photoshop 中如何使用和快捷建立灰度选区

    灰度蒙版是风光后期处理技巧中十分重要的一个技巧,本篇教程主要分享了如何利用灰度蒙版快速建立无数个灰度选区. 怎样任意在ps中选择我们想要调整的地方 而在风光摄影后期中,我们很多时候都是选择一个灰度,来 ...

  • 【精品博文】一种借助EBR实现数据延时的方法

    数据延时线(Delay Line)在数字信号处理中具有广泛的应用,例如FIR滤波器设计中就会需要用到数据延时线.实际上,在绝大部分的Pipeline设计中都会需要用到数据延时.本文介绍一种基于EBR( ...

  • 【精品博文】PWM蜂鸣器驱动之引脚分配

    【精品博文】PWM蜂鸣器驱动之引脚分配

  • 【精品博文】聊一聊数字电路中时钟抖动

    随着通信系统中的时钟速率迈入GHz级,抖动这个在模拟设计中十分关键的因素,也开始在数字设计领域中日益得到人们的重视.在高速系统中,时钟或振荡器波形的时序误差会限制一个数字I/O接口的最大速率.不仅如此 ...

  • 【精品博文】MIPI扫盲——DSI介绍(二)

    目录篇地址:http://blog.chinaaet.com/justlxy/p/5100052503  这一篇来简单的介绍一下MIPI DSI Video Mode的三种操作模式: Non-Busr ...

  • 【精品博文】MIPI扫盲——D-PHY介绍(一)

    D-PHY种的PHY是物理层(Physical)的意思,那么D是什么意思呢?在MIPI D-PHY的文档中有提到过,D-PHY的最初版本的设计目标是500Mbits/s,而D是罗马数字(拉丁文数字)中 ...

  • 【精品博文】MIPI扫盲——What the hell is mipi?

    目录篇地址:http://blog.chinaaet.com/justlxy/p/5100052503  MIPI是Mobile Industry Processor Interface(移动通信行业 ...

  • 【精品博文】FPGA定点小数计算(Verilog版)第七篇——平方根倒数运算(使用John Carmack方法)

    有一段时间没有写博客了,突然想起前一段时间挖的坑,所以决定今天来填一下--其实,这一篇原本打算写的是采用牛顿迭代法的平方根运算的博文,现在改为平方根倒数运算,很显然就是之前的尝试失败了-- 为什么说是 ...