计算图像的直方图
- 格式:doc
- 大小:101.04 KB
- 文档页数:5
课设报告正⽂(MATLAB的图像直⽅图的计算与显⽰)⽬录摘要........................................................................ I 1 基础介绍 (1)1.1MATLAB简介 (1)1.2数字图像处理简介 (1)2 设计原理分析 (3)2.1灰度直⽅图的定义 (3)2.2设计原理 (3)2.3常⽤函数介绍 (3)3 程序及运⾏结果 (4)3.1流程图 (4)3.2源程序 (4)3.3运⾏结果 (5)3.4库函数运⾏结果 (7)4设计总结 (8)5⼼得体会 (9)参考⽂献 (10)1 基础介绍1.1MATLAB简介MATLAB是由美国mathworks公司发布的主要⾯对科学计算、可视化以及交互式程序设计的⾼科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及⾮线性动态系统的建模和仿真等诸多强⼤功能集成在⼀个易于使⽤的视窗环境中,为科学研究、⼯程设计以及必须进⾏有效数值计算的众多科学领域提供了⼀种全⾯的解决⽅案,并在很⼤程度上摆脱了传统⾮交互式程序设计语⾔(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进⽔平。
MATLAB和Mathematica、Maple并称为三⼤数学软件。
它在数学类科技应⽤软件中在数值计算⽅⾯⾸屈⼀指。
MATLAB可以进⾏矩阵运算、绘制函数和数据、实现算法、创建⽤户界⾯、连接其他编程语⾔的程序等,主要应⽤于⼯程计算、控制设计、信号处理与通讯、图像处理、信号检测、⾦融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、⼯程中常⽤的形式⼗分相似,故⽤MATLAB来解算问题要⽐⽤C,FORTRAN等语⾔完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为⼀个强⼤的数学软件。
在新的版本中也加⼊了对C,FORTRAN,C++ ,JAVA的⽀持。
直方图均衡化计算直方图均衡化是基于灰度直方图的图像增强的一种方法,还有另外一种方法是直方图规定化。
均衡化的目的是将原始图像的直方图变为均衡分布的的形式,将一非均匀灰度概率密度分布图像,通过寻求某种灰度变换,变成一幅具有均匀概率密度分布的目的图像。
具体原理如下:1、连续灰度级:假定:r代表灰度级,P(r)为概率密度函数。
r值已经过归一化处理,灰度值范围在[0,1]之间。
r与P(r)之间的关系如下:非均匀分布的连续灰度直方图均衡化的目的是将上面的非均匀分布变成如下图所示的均匀分布:均匀分布的连续灰度直方图我们接下来要做的是要找到一种变换S=T(r)使直方图变平直,为使变换后的灰度仍保持从黑到白的单一变化顺序,且变换范围与原先一致,以避免整体变亮或变暗,需要有如下规定:(1)在0 <= r <= 1中,T(r)是单调递增函数,且0 <= T(r) <= 1;(2)反变换r=(s),(s)也为单调递增函数,且0 <= s <= 1。
直方图均衡化变换公式推导图示因为灰度变换不影响像素的位置分布,而且也不会增减像素数目,所以有如下的推导公式:2、离散灰度级:设一幅图像的像素总数为n,分为L个灰度级,其中::表示第K个灰度级出现的个数。
:第K个灰度级出现的概率。
(0<=<=1, k=0,1,2,...,L-1),公式如下:计算的基本步骤如下:(1)求出图像中所包含的灰度级,一般都经过归一化处理,范围在[0,1]之间,也可以定在[0,L-1]之间。
(2)统计各灰度级的像素数目(k=0,1,2,...,L-1)。
(3)计算图像直方图。
(4)计算变换函数,即:(5)用变换函数计算映射后输出的灰度级。
(6)统计映射后新的灰度级的像素数目。
(7)计算输出图像的直方图。
根据上面推导出来的公式以及计算步骤,我们可以结合栗子来加深理解~~~eg:设图像有64*64=4096的像素,有8个灰度级,灰度分布如下所示:由上图我们知道该图像的,和,下一步我们要做的就是通过变换函数求,即:依次可求得,,,,。
图像增强算法(直⽅图均衡化、拉普拉斯、Log、伽马变换)⼀、图像增强算法原理图像增强算法常见于对图像的亮度、对⽐度、饱和度、⾊调等进⾏调节,增加其清晰度,减少噪点等。
图像增强往往经过多个算法的组合,完成上述功能,⽐如图像去燥等同于低通滤波器,增加清晰度则为⾼通滤波器,当然增强⼀副图像是为最后获取图像有⽤信息服务为主。
⼀般的算法流程可为:图像去燥、增加清晰度(对⽐度)、灰度化或者获取图像边缘特征或者对图像进⾏卷积、⼆值化等,上述四个步骤往往可以通过不同的步骤进⾏实现,后续将针对此⽅⾯内容进⾏专题实验,列举其应⽤场景和处理特点。
本⽂章是⼀篇综合性⽂章,算是⼀篇抛砖引⽟的⽂章,有均衡化、提⾼对⽐度、降低对⽐度的算法。
1.1 基于直⽅图均衡化的图像增强图像对⽐度增强的⽅法可以分为两种:直接对⽐度增强⽅法,间接对⽐度增强⽅法。
直⽅图拉伸和直⽅图均衡化是常见的间接对⽐度增强⽅法。
直⽅图拉伸是利⽤对⽐度拉伸对直⽅图进⾏调整,扩⼤前景和背景灰度的差别,这种⽅法可以通过线性和⾮线性的⽅法来实现,其中ps中就是利⽤此⽅法提⾼对⽐度;直⽅图均衡化则是利⽤累积函数对灰度值进⾏调整,实现对⽐度的增强。
直⽅图均衡化处理原理:将原始图像的灰度图从⽐较集中的某个灰度区间均匀分布在整个灰度空间中,实现对图像的⾮线性拉伸,重新分配图像像素值。
算法应⽤场景:1、算法的本质是重新分布图像的像素值,增加了许多局部的对⽐度,整体的对⽐度没有进⾏太⼤改变,所以应⽤图像为图像有⽤数据的对⽐度相近是,例如:X光图像,可以将曝光过度或曝光不⾜照⽚进⾏更好的显⽰,或者是背景及前景太亮或太暗的图像⾮常有⽤。
2、算法当然也有缺点,具体表现为:变换后的图像灰度级减少,某些细节减少;某些图像有⾼峰值,则处理后对⽐度不⾃然的过分增强。
算法实现特点:1、均衡化过程:直⽅图均衡化保证在图像像素映射过程中原来的⼤⼩关系保持不变,即较亮的区域依旧较亮,较暗的依旧较暗,只是对⽐度增加,不能明暗颠倒;保证像素映射函数的值域在0和255之间。
图像处理基础(8):图像的灰度直⽅图、直⽅图均衡化、直⽅图规定化(匹配)本⽂主要介绍了灰度直⽅图相关的处理,包括以下⼏个⽅⾯的内容:利⽤OpenCV 计算图像的灰度直⽅图,并绘制直⽅图曲线直⽅图均衡化的原理及实现直⽅图规定化(匹配)的原理及实现图像的灰度直⽅图⼀幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的⼀个重要特征。
图像的灰度直⽅图就描述了图像中灰度分布情况,能够很直观的展⽰出图像中各个灰度级所占的多少。
图像的灰度直⽅图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率。
不过通常会将纵坐标归⼀化到[0,1]区间内,也就是将灰度级出现的频率(像素个数)除以图像中像素的总数。
灰度直⽅图的计算公式如下:p (r k )=n kMN其中,r k 是像素的灰度级,n k 是具有灰度r k 的像素的个数,MN 是图像中总的像素个数。
OpenCV 灰度直⽅图的计算直⽅图的计算是很简单的,⽆⾮是遍历图像的像素,统计每个灰度级的个数。
在OpenCV 中封装了直⽅图的计算函数calcHist ,为了更为通⽤该函数的参数有些复杂,其声明如下:void calcHist( const Mat* images, int nimages,const int* channels, InputArray mask,OutputArray hist, int dims, const int* histSize,const float** ranges, bool uniform = true, bool accumulate = false );该函数能够同时计算多个图像,多个通道,不同灰度范围的灰度直⽅图.其参数如下:images ,输⼊图像的数组,这些图像要有相同⼤⼤⼩,相同的深度(CV_8U CV_16U CV_32F ).nimages ,输⼊图像的个数channels ,要计算直⽅图的通道个数。
遥感和数字图像处理复习题一、名词解释:数字影像:物体光辐射能量的数字记录形式或像片影像经采样量化后的二维数字灰度序列图像采样:将空间上连续的图像变换成离散点的操作称为采样灰度量化:将像素灰度转换成离散的整数值的过程叫量化像素:将地面信息离散化而形成的格网单元辐射误差:传感器接受到的电磁波能量和目标本身辐射的能量是不一致的辐射校正:消除图像数据中依附在图亮度中的各种失真的过程灰度直方图: 以每个像元为单位,表示线性拉伸:采用线性或分段线性的函数改善图像对比度平滑:为抑制噪声,改善图像质量所做的处理锐化:通过微分使图像中的地物边缘,轮廓或线状目标突出滤波:将信号中特定波段频率部分滤除的操作,是抑制和防止干扰的一项重要措施高通滤波:保留图像的高频部分而消弱低频部分的处理低通滤波:保留图像的低频部分而抑制高频部分的处理植被指数:根据地物光谱反射率的差异作比值可以突出图像中植被的特征、提取植被类别或估算绿色生物量,能够提取植被的算法称为植被指数伪彩色合成:将一个波段或单一的黑白图像变换为彩色图像,从而把人眼不能区分的微小的灰度差别显示为明显的色彩差异,更便于解译和提取有用信息。
真彩色合成:根据彩色合成原理,可选择同一目标的单个多光谱数据合成一幅彩色图像,当合成图像的红绿蓝三色和三个多光谱段相吻合,这幅图像就再现了地物的彩色原理,就称为真彩色合成。
假彩色合成:根据加色法或减色法,将多波段单色影像合成为假彩色影像的一种彩色增强技术。
密度分割法:对单波段黑白遥感图像按灰度分层,对每层赋予不同的色彩,使之变为一幅彩色图像直方图均衡化:将原图像的直方图通过变换函数变为各亮度级均匀分布的直方图,然后按均匀直方图像修改原图像的像元亮度值,从而获得一幅亮度分布均匀的新图像。
监督分类: 事先已经知道类别先验知识,对未知类别的样本进行分类的方法非监督分类:在事先不知道类别特征,主要根据像元间相似度的大小进行归类合并(将相似度大的像元归为一类)的方法特征空间:以各波段图像的亮度分布为坐标轴组成的空间训练区:在监督分类中,从图像上选取的已知其地物属性或物体特性的图像区域或像元,用于进行分类的学习和训练,以建立分类模型或分类函数(即感兴趣区)。
直方图均衡化计算公式直方图均衡化(色调均化)“图像(Image)>调整(Adjust)”菜单的功能色调均化(Equalize)Photoshop菜单:图像>调整>色调均化公式:(公式中Sk表示均衡化后的灰度值,∑表示总与,nj是原图中某个灰度色阶j 的像素数量,j的范围是0~k,N是图像像素总数。
)“色调均化”命令重新分布图像中像素的亮度值,以便它们更均匀地呈现所有范围的亮度级。
使用此命令时,Photoshop尝试对图像进行直方图均衡化(Histogram Equalization),即在整个灰度范围中均匀分布每个色阶的灰度值。
当扫描的图像显得比原稿暗,而您想平衡这些值以产生较亮的图像时,能够使用“色调均化”命令。
配合使用“色调均化”命令与“直方图”命令,能够看到亮度的前后比较。
使用“色调均化”命令:1. 选择菜单图像>调整>色调均化。
2. 假如已选择一个图像区域,在弹出的对话框中选择要均化的内容,然后点按“好”。
•“仅色调均化所选区域”只均匀地分布选区的像素。
•“基于所选区域色调均化整个图像”基于选区中的像素均匀分布所有图像的像素。
原理直方图均衡化是一种灰度变换算法,因此我们重点研究灰度图像的直方图均衡化。
绝对的均匀图A是一个黑白灰均匀渐变,0~255的每一个色阶的灰度数量都是相同的。
图B 的是图A的像素打乱了顺序随机分布的,每种灰度的数量都与图A的相同,因而它的直方图也与图A的相同。
图A与图B的直方图。
每种灰度数量是相同的,直方图呈一个黑色矩形。
近似的均匀关于通常的图像,由于每种灰度的像素数量并不相同,我们没办法把每种灰度的分量调得像图A、B那么均匀,但是能够做到近似的均匀。
也就是说,把直方图横向平均分成几份之后,使每一份的像素数量大致相等。
下面是一幅图片的直方图,共有19200个像素,从左到右平均分成三份。
均衡化之后,每份的像素数量都在6400左右。
手工调整方法我们拍摄或者扫描的照片往往会由于光线太强或者太弱,使图像对比度减弱,细节分辨不清。
图像二值化阈值选取常用方法最近在公司搞车牌识别的项目,车牌定位后,发现对车牌区域二值化的好坏直接影响后面字符切分的过程,所以就想把常用阈值选取方法做一个总结。
图像二值化阈值选取常用方法:1.双峰法。
2.P 参数法。
3.最大类间方差法(Otsu 、大津法)。
4.最大熵阈值法。
5.迭代法(最佳阈值法)。
1.双峰法在一些简单的图像中,物体的灰度分布比较有规律,背景与目标在图像的直方图各自形成一个波峰,即区域与波峰一一对应,每两个波峰之间形成一个波谷。
那么,选择双峰之间的波谷所代表的灰度值T 作为阈值,即可实现两个区域的分割。
如图1所示。
2.P 参数法当目标与背景的直方图分布有一定重叠时,两个波峰之间的波谷很不明显。
若采用双峰法,效果很差。
如果预先知道目标占整个图像的比例P ,可以采用P 参数法。
P 参数法具体步骤如下:假设预先知道目标占整个图像的比例为P ,且目标偏暗,背景偏亮。
1)、计算图像的直方图分布P(t),t=0,1,.....255。
2)、计算阈值T ,使其满足0()*Tt p t Pm n =-∑最小。
P 参数法一般用于固定分辨率下,目标所占整个图像比例已知的情况。
3.最大类间方差法(Otsu)最大类间方差法是由Otsu 于1979年提出的,是基于整幅图像的统计特性实现阈值的自动选取的,是全局二值化最杰出的代表。
Otsu 算法的基本思想是用某一假定的灰度值t 将图像的灰度分成两组,当两组的类间方差最大时,此灰度值t 就是图像二值化的最佳阈值。
设图像有L 个灰度值,取值范围在0~L-1,在此范围内选取灰度值T ,将图像分成两组G0和G1,G0包含的像素的灰度值在0~T ,G1的灰度值在T+1~L-1,用N 表示图像像素总数,i n 表示灰度值为i 的像素的个数。
已知:每一个灰度值i 出现的概率为/i i p n N =;假设G0和G1两组像素的个数在整体图像中所占百分比为01ϖϖ、,两组平均灰度值为01μμ、,可得概率:00=T ii p ϖ=∑11011L i i T p ωω-=+==-∑平均灰度值:00T i i ipμ==∑111L ii T i p μ-=+=∑图像总的平均灰度值:0011μϖμϖμ=+类间方差:()()()22200110101()g t ωμμωμμωωμμ=-+-=-最佳阈值为:T=argmax(g(t))使得间类方差最大时所对应的t 值。
图像算量计算公式是什么图像算量计算是指利用数字图像处理技术对图像进行量化分析和计算的过程。
在图像处理领域,图像算量计算是非常重要的一部分,它可以帮助我们从图像中提取出有用的信息,并进行进一步的分析和处理。
在图像算量计算中,常常需要用到一些数学公式和算法来对图像进行处理和计算。
本文将介绍一些常用的图像算量计算公式和方法。
一、图像灰度值的计算。
在图像处理中,灰度值是一个非常重要的概念。
图像的灰度值表示了图像中每个像素点的亮度,它可以用来描述图像中物体的明暗程度。
在图像算量计算中,我们常常需要对图像的灰度值进行计算和分析。
图像的灰度值可以用以下公式来计算:灰度值 = 0.299 R + 0.587 G + 0.114 B。
其中,R、G、B分别表示图像中每个像素点的红、绿、蓝通道的数值。
通过这个公式,我们可以将彩色图像转换为灰度图像,并对图像的灰度值进行进一步的处理和分析。
二、图像的直方图计算。
图像的直方图是描述图像灰度分布情况的一种统计图表。
通过直方图,我们可以直观地了解图像中各个灰度级别的分布情况,从而对图像进行进一步的分析和处理。
图像的直方图可以用以下公式来计算:直方图 = 统计各个灰度级别的像素点个数。
通过计算图像的直方图,我们可以得到图像的灰度分布情况,从而对图像进行进一步的处理和分析。
三、图像的平均灰度值计算。
图像的平均灰度值是描述图像整体灰度水平的一个重要指标。
通过计算图像的平均灰度值,我们可以了解图像的整体亮度情况,从而对图像进行进一步的处理和分析。
图像的平均灰度值可以用以下公式来计算:平均灰度值 = Σ(灰度值)/像素总数。
通过计算图像的平均灰度值,我们可以得到图像的整体灰度水平,从而对图像进行进一步的处理和分析。
四、图像的边缘检测算法。
图像的边缘检测是图像处理中的一个重要任务,它可以帮助我们找到图像中物体的边界和轮廓。
在图像算量计算中,常常需要用到一些边缘检测算法来对图像进行处理和分析。
hog方法HOG方法:从图像中提取特征的有效方法引言在计算机视觉领域,图像特征提取是一项重要的任务。
特征提取通常用于图像分类、目标检测和目标跟踪等应用中。
HOG (Histogram of Oriented Gradients)方法是一种常用的图像特征提取方法,它通过计算图像局部区域的梯度直方图来描述图像的特征,被广泛应用于人脸识别、行人检测等领域。
HOG方法的原理HOG方法的基本思想是将图像分割成小的重叠区域,并计算每个区域内的梯度直方图。
具体步骤如下:1. 图像预处理:首先,需要对图像进行预处理,包括图像归一化、灰度化和高斯平滑等操作。
这些预处理步骤有助于降低噪声的影响,并提高特征的稳定性。
2. 计算梯度:接下来,需要计算图像中每个像素点的梯度。
通常使用Sobel算子对图像进行卷积操作,得到每个像素点的梯度幅值和方向。
3. 划分单元格:将图像分割成小的单元格,通常为16×16像素大小。
每个单元格内包含一定数量的像素点。
4. 构建梯度直方图:对每个单元格内的像素点,根据其梯度方向,将其投票到相应的梯度直方图中。
梯度直方图可以反映该单元格内的梯度分布情况。
5. 归一化:为了保持特征的不变性,需要对梯度直方图进行归一化处理。
通常使用块归一化的方法,将若干个相邻单元格的梯度直方图进行拼接,并进行L2范数归一化。
6. 特征向量表示:最终,将所有归一化后的梯度直方图拼接成一个特征向量,即HOG特征向量。
该特征向量可以用于后续的分类、检测和跟踪任务。
HOG方法的优势HOG方法在图像特征提取中具有以下优势:1. 不受光照变化的影响:HOG方法基于局部梯度的计算,对光照变化不敏感。
这使得HOG方法在人脸识别、行人检测等应用中具有较好的鲁棒性。
2. 提取局部纹理信息:HOG方法通过计算梯度直方图,可以有效地提取图像的局部纹理信息。
这些纹理信息对于物体的识别和检测非常重要。
3. 低维度特征表示:HOG方法提取的特征向量维度相对较低,不仅节省了存储空间,也降低了后续分类和检测任务的计算复杂度。
灰度图像直方图均衡化变换函数算法方案一:1) 灰度图像直方图均衡化算法步骤:1、列出原始图像和变换后图像的灰度级I:j=0,1,…L-1,其中L是灰度级的个数;2、统计原始图像个灰度级的像素个数Ni;3、计算原始图像直方图:p(i)=Ni/N,N为原始图像像素总数;4、计算累计直方图Pj=∑p(k),k=0,1…j;5、利用灰度变换函数计算变换后的灰度值,并四舍五入:j=INT[(L-1)Pj+];6、肯定灰度变换关系i—>j,据此将原图像的灰度值f(m,n)=i修正为g(m,n)=j;7、统计变换后各灰度级的像素个数Nj;8、计算变换后图像的直方图p(j)=Nj/N;2) m文件I=imread('');I=I(:,:,1);[m,n]=size(I);num=m*n;pre_mat=zeros(1,256);aft_mat=zeros(1,256);for i=1:mfor j=1:npre_mat(I(i,j)+1)= pre_mat(I(i,j)+1)+1;endendaft_mat(I)=aft_mat(I)/num;for k=2:256s(k)=pre_mat(k)/num;aft_mat(k)=aft_mat(k-1)+s(k);endM=zeros(m,n);aft_mat=aft_mat*255;for i=1:mfor j=1:nM(i,j)=aft_mat(I(i,j)+1);endendJ=uint8(M)subplot(3,2,1)imshow(I);title('1.原始图像');subplot(3,2,2)imhist(I);title('2.原始图像直方图 ');subplot(3,2,3)imshow(J);title('3.均衡化图像');subplot(3,2,4)imhist(J);title('4.均衡化图像直方图');A=histeq(I);subplot(3,2,5)imshow(A);title('5.系统均衡化图像');subplot(3,2,6)imhist(A);title('6.系统均衡化图像直方图')图1 均衡化处置对比经实际验证:该方案对黑白图片均衡化处置有较好的效果。
histeq函数直方图均衡化的基本原理是将输入图像的像素值进行变换,使得输出图像的像素值在整个亮度范围内分布均匀。
这种均匀分布有效地增强了图像的对比度,使得细节更加清晰可见。
直方图均衡化的过程可以分为以下几个步骤:1.计算图像的直方图:通过统计每个像素值在图像中的出现次数,得到图像的直方图。
直方图表示了图像中各个像素值的分布情况。
2.计算累积分布函数:根据直方图,计算累积分布函数(CDF),用于表示每个像素值的累积分布情况。
CDF的计算可以通过对直方图进行累积求和得到。
3.像素值映射:通过将CDF进行线性归一化,将像素值从原始图像映射到一个新的像素值。
这个新的像素值将在整个亮度范围内分布均匀。
4.生成均衡化后的图像:将原始图像中的每个像素值根据像素值映射得到的新像素值进行替换,从而生成均衡化后的图像。
在实际应用中,histeq函数通常用于对灰度图像进行增强。
该函数可以改善图像的亮度分布,增强图像的对比度,使得图像更加清晰。
它常被用于图像预处理、图像增强和图像分析等领域。
需要注意的是,histeq函数虽然能够显著改善图像的对比度和亮度分布,但也可能引入一些副作用。
比如,它可能导致图像中一些细节的损失,或者增强图像中的噪声。
因此,在应用histeq函数时需要根据具体问题进行调节和优化。
在Matlab中,histeq函数可以通过以下代码进行调用:```MATLABoutput_image = histeq(input_image);```其中,input_image表示输入图像,output_image表示均衡化后的输出图像。
总结起来,histeq函数是一种常用的图像增强方法,通过将输入图像的像素值进行变换,使得输出图像的像素值在整个亮度范围内分布均匀。
这种均匀分布有效地增强了图像的对比度和细节,使得图像更加清晰可见。
它在图像预处理、图像增强和图像分析等领域中有广泛的应用。
然而,在使用histeq函数时需要注意可能引入的副作用,并根据具体问题进行调节和优化。
南通大学计算机科学与技术学院
《数字图像处理》课程实验
报告书
实验名计算图像的直方图
班级计 121
姓名张进
学号 1213022016
2014年6月 16 日
一、实验内容
1、打开一张图,计算其直方图。
二、图像直方图的概念
图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。
纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。
图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。
在实际工程中,图像直方图在特征提取、图像匹配等方面都有很好的应用。
三、灰度直方图的计算
1、灰度直方图的定义
灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率)。
一维直方图的结构表示为
高维直方图可以理解为图像在每个维度上灰度级分布的直方图。
常见的是二维直方图。
如红-蓝直方图的两个分量分别表示红光图像的灰度值和蓝光图像灰度值的函数。
其图像坐标(Dr,Db)处对应在红光图像中具有灰度级Dr同时在蓝光图像中具有灰度级Db的像素个数。
这是基于多光谱——每个像素有多个变量——的数字图像,二维中对应每个像素统计个变量。
简单的说,直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin中。
bin的数值是从数据中计算出的特征的统计量,这些数据可以是诸如梯度,方向,色彩或者任何其他特征。
无论如何,直方图获得的是数据分布的统计图。
通常直方图的数据要低于原始数据。
由于原始数据点可以表征任何事情,所以直方图实际上是一个方便表示图像特征的手段。
2、灰度直方图的计算
对于彩色图像的R、G、B各彩色分量取反的技术就是图像的反色处理,这在处理二值化图像的连通区域选取的时候非常重要。
如物体连通域用黑色表示,而二值化后的物体连通域图像可那是白色的,而背景是黑色的,这时应手动选取图像的反色处理或有程序根据背景和物体连通域两种颜色的数量所占比例而自动选择是否选择选取图像的反色处理
int main()
{
Mat Image=imread("../cat.png");
cvtColor(Image,Image,CV_BGR2GRAY);
const int channels[1]={0};
const int histSize[1]={256};
float hranges[2]={0,255};
const float* ranges[1]={hranges};
MatND hist;
calcHist(&Image,1,channels,Mat(),hist,1,histSize,ranges);
return 0;
}
3、彩色直方图计算
int main()
{
Mat Image=imread("../cat.png");
const int channels[3]={0,1,2};
const int histSize[3]={256,256,256};
float hranges[2]={0,255};
const float* ranges[3]={hranges,hranges,hranges};
MatND hist;
calcHist(&Image,1,channels,Mat(),hist,3,histSize,ranges);
return 0;
}
4、不均匀直方图
分别统计0-50,50-80,80-150,150-230,230-255区间的灰度分布:
int main()
{
Mat Image=imread("../cat.png");
cvtColor(Image,Image,CV_BGR2GRAY);
const int channels[1]={0};
int histSize[1]={5};
float hranges[6]={0,50,80,150,230,255};
const float* ranges[1]={hranges};
MatND hist;
calcHist(&Image,1,channels,Mat(),hist,1,histSize,ranges,false);
return 0;
}
四、直方图的显示
直方图计算得到的实际上是一个多维数组,这并不够直观,我们希望能够像在Excel中把相关数据通过表的形式表示出来。
下面通过划线函数来把一个灰度直方图显示出来:
Mat getHistImg(const MatND& hist)
{
double maxVal=0;
double minVal=0;
//找到直方图中的最大值和最小值
minMaxLoc(hist,&minVal,&maxVal,0,0);
int histSize=hist.rows;
Mat histImg(histSize,histSize,CV_8U,Scalar(255));
// 设置最大峰值为图像高度的90%
int hpt=static_cast<int>(0.9*histSize);
for(int h=0;h<histSize;h++)
{
float binV al=hist.at<float>(h);
int intensity=static_cast<int>(binVal*hpt/maxVal);
line(histImg,Point(h,histSize),Point(h,histSize-intensity),Scalar::all(0));
}
return histImg;
}
实践结果:
原图灰度直方图
五、心得体会
本次实验是在读取位图的基础上进行的,c语言基础不牢造成很多困难,上网搜集资料,做图象处理的不多,但是确实是一门很值得研究的课题,因为我们无时无刻在接触各种图象。
对图像的处理就尤为重要了。