计算图像的直方图
- 格式: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左右。
手工调整方法我们拍摄或者扫描的照片往往会由于光线太强或者太弱,使图像对比度减弱,细节分辨不清。
南通大学计算机科学与技术学院
《数字图像处理》课程实验
报告书
实验名计算图像的直方图
班级计 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语言基础不牢造成很多困难,上网搜集资料,做图象处理的不多,但是确实是一门很值得研究的课题,因为我们无时无刻在接触各种图象。
对图像的处理就尤为重要了。