opencv直方图

opencv直方图

直方图均衡化

图像的直方图

  • 直方图是图像中像素强度分布的图形表达方式,它统计了每一个强度值所具有的像素个数。
  • 横坐标代表了图像像素的种类,可以是灰度,也可以是彩色。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。
  • 像素是组成图像的最基本单元要素:点。分辨率是指在长和宽的两个方向上各拥有的像素个数。
  • 像素分布的直方图往往可以作为图像一个很重要的特征,在实际工程中,图像直方图在特征提取图像匹配等方面都有很好的应用。

直方图均衡化

  • 直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法。
  • 均衡化指的是把一个分布 (给定的直方图) 映射 到另一个分布 (一个更宽更统一的强度值分布), 所以强度值分布会在整个范围内展开。

函数调用

cvtColor( src, src, CV_BGR2GRAY );
equalizeHist( src, dst );

opencv-直方图计算

直方图计算

  • 直方图是对数据的集合统计,并将统计结果分布于一系列预定义的 bins 中。
  • 这里的数据不仅仅指的是灰度值, 统计数据可能是任何能有效描述图像的特征。
  • bins 表示统计的数据范围分割成的子区域:range = bins1 U bins2 U bins3 …

函数调用

//计算直方图:
calcHist( &rgb_planes[0], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate );

参数说明如下:

  • &rgb_planes[0]: 输入数组(或数组集)
  • 1: 输入数组的个数
  • 0: 需要统计的通道 (dim)索引
  • Mat(): 掩码( 0 表示忽略该像素), 如果未定义,则不使用掩码
  • r_hist: 储存直方图的矩阵
  • 1: 直方图维数
  • histSize: 每个维度的bin数目
  • histRange: 每个维度的取值范围
  • uniform 和 accumulate: bin大小相同,清除直方图痕迹
//将直方图归一化到范围 [ 0, histImage.rows ]
normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );

参数说明如下:

  • r_hist: 输入数组
  • r_hist: 归一化后的输出数组(支持原地计算)
  • 0 及 histImage.rows: 这里,它们是归一化 r_hist 之后的取值极限
  • NORM_MINMAX: 归一化方法 (例中指定的方法将数值缩放到以上指定范围)
  • -1: 指示归一化后的输出数组与输入数组同类型
  • Mat(): 可选的掩码

直方图对比

原理

  • 要比较两个直方图( H_{1} and H_{2} ), 首先必须要选择一个衡量直方图相似度的对比标准 (d(H_{1}, H_{2}))。
  • OpenCV 函数 compareHist 执行了具体的直方图对比的任务。

反向投影

原理

  • 反向投影是一种记录给定图像中的像素点如何适应直方图模型像素分布的方式。
  • 反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找图像中存在的该特征。

  • 反向投影用于在输入图像(通常较大)中查找特定图像(通常较小或者仅1个像素,以下将其称为模板图像)最匹配的点或者区域,也就是定位模板图像出现在输入图像的位置。

  • 反向投影查找原理:查找的方式就是不断的在输入图像中切割跟模板图像大小一致的图像块,并用直方图对比的方式与模板图像进行比较。

  • 假设我们有一张100x100的输入图像,有一张10x10的模板图像,查找的过程:

    • 从输入图像的左上角(0,0)开始,切割一块(0,0)至(10,10)的临时图像;
    • 生成临时图像的直方图;
    • 用临时图像的直方图和模板图像的直方图对比,对比结果记为c;
    • 直方图对比结果c,就是结果图像(0,0)处的像素值;
    • 切割输入图像从(0,1)至(10,11)的临时图像,对比直方图,并记录到结果图像;
    • 重复以上步骤直到输入图像的右下角。
  • 反向投影的结果包含了:以每个输入图像像素点为起点的直方图对比结果。可以把它看成是一个二维的浮点型数组,二维矩阵,或者单通道的浮点型图像。可以这样理解:对于calcBackProjectPatch,也就是是基于块的反向投影形式,利用直方图做匹配,类似于模板匹配,只不过这些模板转换为直方图,而原图中以某点为基准,抠出来作对比的部分也转换为直方图,两个直方图作匹配,匹配的结果作为此点的值。结果会是一张灰度图。

  • 如果输入图像和模板图像一样大,那么反向投影相当于直方图对比。如果输入图像比模板图像还小,无法进行反向投影。

步骤

  • 对测试图像中的每个像素 ( p(i,j) ),获取色调数据并找到该色调( ( h_{i,j}, s_{i,j} ) )在直方图中的bin的位置。
  • 查询 模型直方图 中对应的bin - ( h_{i,j}, s_{i,j} ) - 并读取该bin的数值。
  • 将此数值储存在新的图像中(BackProjection)。 你也可以先归一化 模型直方图 ,这样测试图像的输出就可以在屏幕显示了。
  • 使用统计学的语言, BackProjection 中储存的数值代表了测试图像中该像素属于特征区域的概率
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动控制节水灌溉技术的高低代表着农业现代化的发展状况,灌溉系统自动化水平较低是制约我国高效农业发展的主要原因。本文就此问题研究了单片机控制的滴灌节水灌溉系统,该系统可对不同土壤的湿度进行监控,并按照作物对土壤湿度的要求进行适时、适量灌水,其核心是单片机和PC机构成的控制部分,主要对土壤湿度与灌水量之间的关系、灌溉控制技术及设备系统的硬件、软件编程各个部分进行了深入的研究。 单片机控制部分采用上下位机的形式。下位机硬件部分选用AT89C51单片机为核心,主要由土壤湿度传感器,信号处理电路,显示电路,输出控制电路,故障报警电路等组成,软件选用汇编语言编程。上位机选用586型以上PC机,通过MAX232芯片实现同下位机的电平转换功能,上下位机之间通过串行通信方式进行数据的双向传输,软件选用VB高级编程语言以建立友好的人机界面。系统主要具有以下功能:可在PC机提供的人机对话界面上设置作物要求的土壤湿度相关参数;单片机可将土壤湿度传感器检测到的土壤湿度模拟量转换成数字量,显示于LED显示器上,同时单片机可采用串行通信方式将此湿度值传输到PC机上;PC机通过其内设程序计算出所需的灌水量和灌水时间,且显示于界面上,并将有关的灌水信息反馈给单片机,若需灌水,则单片机系统启动鸣音报警,发出灌水信号,并经放大驱动设备,开启电磁阀进行倒计时定时灌水,若不需灌水,即PC机上显示的灌水量和灌水时间均为0,系统不进行灌水。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值