灰度图像直方图统计
图像处理6灰度直方图和直方图均衡化

图像处理6灰度直⽅图和直⽅图均衡化灰度直⽅图介绍灰度直⽅图(Gray histogram)是关于灰度级分布的函数,是对图像中灰度级分布的统计。
灰度直⽅图是将数字图像中的所有像素,按照灰度值的⼤⼩,统计其出现的频率。
灰度直⽅图是灰度级的函数,它表⽰图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。
如果将图像总像素亮度(灰度级别)看成是⼀个随机变量,则其分布情况就反映了图像的统计特性,这可⽤probability density function (PDF)来刻画和描述,表现为灰度直⽅图。
实现以下代码便于理解灰度直⽅图的计算,其中histogram函数是基于numpy简化的,运⾏结果如下。
# coding: utf8from skimage import dataimport matplotlib.pyplot as pltimport numpy as npdef histogram(a, bins=10, range=None):"""Compute the histogram of a set of data."""import numpy as npfrom numpy.core import linspacefrom numpy.core.numeric import (arange, asarray)# 转成⼀维数组a = asarray(a)a = a.ravel()mn, mx = [mi + 0.0 for mi in range]ntype = np.dtype(np.intp)n = np.zeros(bins, ntype)# 预计算直⽅图缩放因⼦norm = bins / (mx - mn)# 均分,计算边缘以进⾏潜在的校正bin_edges = linspace(mn, mx, bins + 1, endpoint=True)# 分块对于⼤数组可以降低运⾏内存,同时提⾼速度BLOCK = 65536for i in arange(0, len(a), BLOCK):tmp_a = a[i:i + BLOCK]tmp_a_data = tmp_a.astype(float)# 减去Range下限,乘以缩放因⼦,向下取整tmp_a = tmp_a_data - mntmp_a *= normindices = tmp_a.astype(np.intp)# 对indices标签分别计数,标签等于bins减⼀indices[indices == bins] -= 1n += np.bincount(indices, weights=None,minlength=bins).astype(ntype)return n, bin_edgesif__name__ =="__main__":img=data.coffee()fig = plt.figure()f1 = fig.add_subplot(141)f1.imshow(img)f1.set_title("image")f2 = fig.add_subplot(142)arr=img.flatten()n, bins, patches = f2.hist(arr, bins=256, facecolor='red')f2.set_title("plt_hist")f3 = fig.add_subplot(143)hist, others = np.histogram(arr, range=(0, arr.max()), bins=256)f3.plot(others[1:],hist)f3.set_title("np_hist1")f4 = fig.add_subplot(144)hist, others = histogram(arr, range=(0, arr.max()), bins=256)f4.plot(others[1:], hist)f4.set_title("np_hist2")plt.show()关于bincount函数,可以参考Xurtle的博⽂https:///xlinsist/article/details/51346523bin的数量⽐x中的最⼤值⼤1,每个bin给出了它的索引值在x中出现的次数。
用MATLAB统计图像直方图

提示:从1 开始,不 是从0开始!
有用的命令和函数
3、矩阵元素索引
2、双下标:
有用的命令和函数
循环控制: for 语法:for 控制条件
执行语句; end
找出5阶魔方矩阵中的25的坐标。 a=magic(5); m=0; n=0; for i=1:5 for j=1:5 if a(i,j)==25 m=i; n=j; end end end
字母 颜色
y 黄色 m 粉红 c 亮蓝 r 大红 g 绿色 b 蓝色 w 白色 k 黑色
标点 线型
· 点线
○ 圈线
× ×线
+ +字线
- 实线
*
星形线
: 虚线
-·(--) 点划线
bar(x,y)
while 使用while语句,找出最小的n,使得 n!<10e100
n = 1; while prod(1:n) < 1e100
n = n+1 end fprintf('%g! = %e > 1e100\n', n, prod(1:n)); 70! = 1.197857e+100 > 1e100
绘图:plot(x,y) x = -pi:pi/10:pi; y = tan(sin(x)) - sin(tan(x)); plot(x,y,'--rs','LineWidth',2,...
'MarkerEdgeColor','k',... 'MarkerFaceColor','g',... 'MarkerSize',10)
基本概念
图像直方图均衡化原理

图像直方图均衡化原理
图像直方图均衡化是一种常用的图像增强方法,通过调整图像的像素灰度分布,使得图像的对比度增强、细节更加清晰。
其原理主要分为以下几个步骤:
1. 统计像素灰度值的分布:首先,对待处理的图像,统计每个灰度级别的像素点数量,得到原始图像的灰度直方图。
2. 计算累计分布函数:根据灰度直方图,计算每个灰度级别对应的累计分布函数,即该灰度级别及其之前的像素点的累积数量比例。
3. 灰度映射:对于每个像素点,将其灰度值通过累计分布函数进行映射,得到新的灰度值。
通常情况下,可以通过线性映射或非线性映射来实现,使得图像的灰度分布变得更加均匀。
4. 重构图像:将经过灰度映射处理后的灰度值替换原始图像中的对应像素点的灰度值,从而得到均衡化后的图像。
通过图像直方图均衡化处理,可以提高图像的对比度,使暗部和亮部细节更加突出,同时抑制了图像中灰度级别分布不均匀的问题。
这种方法在图像增强、图像分析等领域都有广泛应用。
matlab中统计特定灰度值的个数

一、概述在图像处理和计算机视觉领域,统计特定灰度值的个数是非常重要的一项工作。
而在使用Matlab进行图像处理时,统计特定灰度值的个数也是一种常见的操作。
本文将从Matlab中统计特定灰度值的个数的方法进行详细介绍。
二、Matlab中统计特定灰度值的个数的函数在Matlab中,可以使用imhist函数来统计图像中特定灰度值的个数。
imhist函数可以统计图像中各个灰度级别的像素数量,并绘制直方图。
其语法如下:counts = imhist(I, nbins)其中,I表示输入的图像,nbins表示要统计的灰度级别的数量。
imhist函数将返回一个长度为nbins的向量counts,counts(i)表示灰度级别i的像素数量。
三、实例演示为了更好地理解imhist函数的使用方法,接下来将以一幅示例图像为例进行演示。
```matlab读取示例图像I = imread('example.png');统计灰度值为128的像素数量counts = imhist(I, 256);显示直方图bar(counts);```上述示例中,首先使用imread函数读取示例图像example.png,然后使用imhist函数统计灰度值为128的像素数量,并将结果保存在counts变量中。
最后使用bar函数绘制counts的直方图,从而可视化灰度值为128的像素数量。
四、使用imhist函数统计特定灰度值的个数的注意事项在使用imhist函数统计特定灰度值的个数时,需要注意以下几点:1. 确保输入的图像是灰度图像或者将彩色图像转换成灰度图像。
2. 灰度级别的数量nbins一般取256,表示统计全部灰度级别的像素数量。
3. 如果只需统计特定灰度值的个数,可以通过调整nbins的取值来实现。
五、总结通过本文的介绍,相信读者已经了解了在Matlab中使用imhist函数来统计特定灰度值的个数的方法。
在图像处理和计算机视觉领域,掌握这一技巧对于解决实际问题非常有帮助。
bmp图像直方图统计

实验名称: BMP 图 像 直 方 图 统 计(一) 实验目的1.熟悉BMP 图像格式2.学习直方图统计方法(二) 基本原理直方图的计算:设图像中某种灰度f i 的像素数为n j ,n 是图像中像素的总数,则灰度级f j 所对应的频数为:(1)初始化:建立一个数组,具有l (如,256)个元素,每个元素初值为0: unsigned long a[256] //保存某灰度级的像素数for (i=0,i<256,i++) a[i]=0;(2)统计:从图像中逐点读取灰度值f(x,y),若f(x,y)=k,令a[k]=a[k]+1;(3)标准化:b[k]=(float)a[k]/像素总数;(4)画出直方图。
流程图如下(三) 实验步骤void CDigiPicDoc::OnDistillHist( ){// TODO: Add your command handler code herelong i,j;//获取图像关键数据long nWidth=m_pDib->GetWidth();long nwidthOnLine = m_pDib->GetDibWidthBytes();long nHeight=m_pDib->GetHeight();BYTE *pData=m_pDib->m_pData;RGBQUAD *pRGBQuad=m_pDib->m_pRGB;//判断图像是否8位图像n n f P j j f =)(1,,2,1,0-=l jif(m_pDib->m_pBitmapInfoHeader->biBitCount!=8){AfxMessageBox("请打开8位位图");return;}//申请存放直方图数据的数组double *hist=0;hist = new double[256];//记得要释放for(i=0;i<256;i++) {hist[i] = 0.0;}//统计直方图数据,即各种灰度出现的次数for(i=0;i<nHeight;i++){for(j=0;j<nWidth;j++){BYTE datatmp = pData[i*nwidthOnLine+j];hist[datatmp]++;}}//将直方图写入文件CString filepath,strTmp;filepath="D:\\hist.txt";CStdioFile file(filepath,CFile::modeCreate|CFile::modeWrite); for(i=0;i<256;i++) {strTmp.Format("%d",i);file.WriteString(strTmp+":\t");strTmp.Format("%lf",hist[i]);file.WriteString(strTmp+"\n");}file.Close();//删除动态申请的空间delete hist;hist = 0;AfxMessageBox("直方图统计完毕!");}(四) 实验结果(五) 实验总结通过这次的实验,使我对Matlab图像处理工具有了较深的了解,对课堂上学习到的理论知识有了明确的认识、知道其在实际中的应用,对于以后的学习和工作都会有很大的帮助。
计算图像的基本统计指标Read课件

灰度熵
总结词
灰度熵是一种衡量图像信息复杂度的指标,表示图像中像素灰度级分布的不确定 性或随机性。
详细描述
灰度熵计算公式为-sum(p(i)*log2(p(i))),其中p(i)表示灰度值为i的像素出现的概 率。较大的熵值意味着图像具有较高的信息量。
PART 03
图像的结构特性
边缘检测
边缘检测是图像处理中的基本操 作,用于识别图像中的边缘和轮
廓。
边缘检测算法通过分析图像中的 像素强度变化来检测边缘,通常 使用一阶或二阶导数来检测边缘
。
常见的边缘检测算法包括Sobel 、Prewitt、Canny等。
角点检测
01
角点检测是图像处理中 的一项重要任务,用于 识别图像中的角点。
灰度游程长度矩阵
灰度游程长度矩阵(RLM)是一种描述图像中连续相同灰 度级像素组成的“游程”的统计方法。它通过计算游程的 长度、方向和变化频率,来描述图像的纹理特征。
灰度游程长度矩阵可以用于图像的边缘检测、纹理分类和 增强等应用。
灰度自相关函数
灰度自相关函数(ACF)是一种描述图像中像素灰度级与其相邻像素灰度级之间 关系的函数。它通过计算像素灰度级与其相邻像素灰度级的相似程度,来描述图 像的纹理特征。
马尔科夫随机场模型
总结词
马尔科夫随机场模型是一种概率图模型,用于描述图像中像素之间的空间依赖关系。
详细描述
马尔科夫随机场模型基于马尔科夫链蒙特卡洛方法,通过定义像素之间的转移概率和状态概率,能够 模拟图像中的纹理、边缘和形状等特征。马尔科夫随机场模型在图像分割、图像恢复和图像识别等领 域有广泛应用。
数字图像处理(直方图).

21
其他类型的统计图
• 误差条:errorbar x = 1:10; y = sin(x); e = std(y)*ones(size(x)); errorbar(x,y,e)
22
其他类型的统计图
• 针状图:stem x = 1:60; y = sin(x/4); stem(x,y,'markerFace','b');
explode
17
环形饼图
ph = pie([2 4 3 5],{'North','South','East','West'}); hold on; z = 0.6*exp(i*linspace(0,pi*2,100)); fill(real(z),imag(z), 0.8*[1,1,1]);
18
二阶导数:
f m, n 1 f m, n 1 2 f m, n f x m, n , 2 x
[1 -2 1]
算子(Operator)
31
点操作
Y = F (X)
32
大局域操作
JP i, j G G IP i, j
38
for k = 1:1000
a(k) = a(k-1)+1; end 并行结构:a = [1:1000]+1;
6.递归过程
an = F(an-1) 计算过程中存在着相似的 部分,这里以阶乘为例 给出递归程序。
function y = fractorial(n); % 递归过程 if n==0; y=1; else y=fractorial(n-1)*n; end
数字图像直方图统计报告

一、学习情况
灰度直方图均衡化进行数字图像处理的基本原理
01
直方图均衡化:利用这一特性对图像中像素个数多的灰度 级进行展宽,而对图像中像素个数少的灰度进行压缩,从
而提高了对比度和灰度色调的变化,使图像更加清晰。
实现步骤: (1) 根据输入的灰度图像计算其原始直方图 (2) 对输入的原始直方图进行累加,计算其cdf (3) 使用累计分布函数的线性插值计算新的灰度值
一、学习情况
Matlab仿真
02
Imhist():直接显示图像的灰度直方图
均衡化: (1) 根据输入的灰度图像计算其原始直方图 (2) 对输入的原始直方图进行累加,计算其cdf (3) 使用累计分布函数的线性插值计算新的灰度值
二、已完成的工作及仿
真结果
二、已完成的工作及仿真结果 1 MATLAB仿真
阈值为100 200
阈值为120 200
阈值为140 180
阈值为150 170
由思考题得出的结论
阈值选择在波谷时,图片黑白分化更加明 显,对比度有所增强,当阈值靠近波峰时, 丢失信息过多,图片失真较为严重。
仿真1 MATLAB仿真
2 修改程序课后题的完成结果
双峰阈值分割法
在一些简单的图像中,物体的灰度分布比较有 规律,背景与各个目标在图像的直方图各自形 成一个波峰(区域与波峰一一对应),每两个 波峰之间会形成一个波谷,选择此波谷作为阈 值。
阈值为60 200
阈值为80 200
数字图像直方图均衡化增强实验 中期汇报
组员:张三
一、学习情况
一、学习情况
灰度直方图均衡化进行数字图像处理的基本原理
01
灰度直方图:横坐标是灰度级别,纵坐标是图像中该灰 度值的出现频率,是一个统计结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.灰度图像直方图统计实习报告
一、实习目的
在学习灰度图像直方图的概念、计算方法、性质和相关应用的基础上,应用Photoshop软件和编写灰度直方图统计程序,能初步掌握图像文件格式读写与图像数据处理,提高学生兴趣和编程能力,巩固所学知识。
二、实习内容
1.实习数据 E:\ 数字图像处理\实习一\Lena.raw
2.利用Photoshop显示图像的灰度直方图,从直方图上了解图像平均明暗度和对比度等信息。
3.要求利用C或C++语言编写灰度图像直方图统计的程序。
三、实习步骤
1.使用Photoshop显示直方图。
(1)点击“文件”-->“打开”,打开一幅图像,此处选取“lena.raw”;
(2)点击“图像”-->“直方图”,显示图像的直方图;
(3)对图像做增强处理,例如选择“图像”-->“调整”-->“自动对比度”对图像进行灰度拉伸,然后再显示直方图,观察它的变化。
2.用C或C++编写显示直方图的程序。
具体代码如下:
#include "stdio.h"
#include "windows.h"
void main()
{
FILE *fp; //文件类指针
fp=fopen("lena.raw","rb"); //打开二进制文件
if (fp==NULL) { printf("文件已损坏,请重新打开。
\n"); }
else printf("文件已打开,已经生成.txt文档,请查看。
\n");
BYTE PIXEL[512*512];
fread(PIXEL,1,512*512,fp);//二进制文件读取
fclose(fp);//关闭文件
int HistogramStat[256];
for(int i=0;i<256;i++) HistogramStat[i]=0;//赋初值
for (i=0;i<512*512;i++)
{
int a=PIXEL[i];
HistogramStat[a]++;
} //统计像素个数
fp=fopen("灰度直方图.txt","rb");
fprintf(fp,"图像灰度,像素个数\n");
for (i=0;i<256;i++)
{ if (HistogramStat[i]!=0)
fprintf(fp,"%5d,%5d\n",i,HistogramStat[i]);
}
fprintf(fp,"像素个数为0的已被省略。
");//输出内容
}
四、思考题
1灰度直方图可以反映出一幅图像的哪些特性?
答:(1)表征了图像的一维信息。
只反映图像中像素不同灰度出现的次数,而未反映像素所在的位置。
即丢失了像素的位置信息。
(2)与图像之间的关系式多对一的映射关系。
一幅图像唯一确定出与之对应的直方图,但不同的图像可能有相同的直方图。
(3)一幅图像可分为多个子区域,子图直方图之和为整图的直方图。
2灰度直方图有何用途?编程实现一种灰度直方图应用的程序。
答:(1)用于判断图像量化是否恰当。
(2)用于确定图像的二值化阈值。
(3)计算图像中物体的面积。
(4)计算图像信息量H(熵)。
3在本次实习的基础上,试编写直方图均衡的程序。
五、实习心得体会
通过这次实习我对灰度直方图的概念和灰度直方图的计算方法以及性质有了更深的了解,对C语言的函数利用操作及文件操作有了更深层次的认识,对Photoshop软件有了一定的了解。
此次实习增强了我的编程能力,使我初步掌握图像文件格式读写与图像数据处理,巩固近期数字图像处理课程上所学知识。