灰度共生矩阵算法
灰度共生矩阵
灰度共⽣矩阵⼀、基本理论1、背景20世纪70年代,R.Haralick等⼈提出了⽤灰度共⽣矩阵(Gray-level Co-occurrence Matrix,GLCM)来描述纹理特征。
2、概念灰度共⽣矩阵(GLDM)的统计⽅法是20世纪70年代初由R.Haralick等⼈提出的,它是在假定图像中各像素间的空间分布关系包含了图像纹理信息的前提下,提出的具有⼴泛性的纹理分析⽅法。
[^1]灰度共⽣矩阵是像素距离和⾓度的矩阵函数,它通过计算图像中⼀定距离和⼀定⽅向的两点灰度之间的相关性,来反映图像在⽅向、间隔、变化幅度以及快慢上的综合信息。
3、含义灰度共⽣矩阵实质上是⼀幅图像中两个像素灰度级的联合直⽅图,是⼀种⼆阶统计量。
普通的灰度直⽅图是对图像上单个像素具有某个灰度进⾏统计的结果,⽽灰度共⽣矩阵是对图像上保持某距离的两像素分别具有某灰度的状况进⾏统计得到的。
取图像(N×N)中任意⼀点(x,y)及偏离它的另⼀点(x+a,y+b),设该点对的灰度值为(g1,g2)。
令点(x,y)在整个图像上移动,则会得到各种(g1,g2)值,设该灰度图像的灰度值级数为 k,则(g1,g2)的组合共有 k² 种。
对于整个图像矩阵,统计出每⼀种(g1,g2)值出现的次数,然后排列成⼀个⽅阵,再⽤(g1,g2)出现的总次数将它们归⼀化为出现的概率P(g1,g2),这样的⽅阵称为灰度共⽣矩阵。
[^2]4、例证下⾯以图⽰解释如何灰度共⽣矩阵的⽣成⽅法,下例中以GLCM表中的(1,1)点为例,GLCM(1,1)即为在左边的整个图像灰度矩阵I中寻找“两灰度值均为1且两像素点⽔平相邻的像素点对”的数量,例中GLCM(1,1)=1,即只有⼀对⽔平相邻的像素点对满⾜两灰度值均为1。
同理可得GLCM(1,2)=2。
GLCM表其实是所有像素点可能的排列⽅式以及每⼀种排列⽅式存在于该幅图像中的数量。
也就是,在图像矩阵I中,像素灰度值为i和像素灰度值为j的两个像素点组成的点对(i,j)的数量,就是GLCM(i,j)的值。
灰度共生矩阵14个特征计算公式
灰度共生矩阵14个特征计算公式一、前言在图像处理和分析领域,灰度共生矩阵是一种重要的特征提取方法。
它能够描述图像中像素之间的灰度分布关系,对于图像的纹理特征分析有着重要的作用。
在本文中,我们将深入探讨灰度共生矩阵的14个特征计算公式,帮助读者更好地理解和应用这一方法。
二、概述灰度共生矩阵灰度共生矩阵(GLCM,Gray Level Co-occurrence Matrix)是由一对像素值的相对空间关系组成的矩阵,它反映了图像中不同灰度级在特定方向上的频率分布。
通过对灰度共生矩阵的分析,可以提取出图像的纹理特征,以及描述图像中不同灰度级之间的关系。
在计算灰度共生矩阵特征时,通常需要使用一些公式来进行计算。
接下来,我们将逐个介绍这14个特征的计算公式。
三、14个特征计算公式1. 能量(Energy)能量是灰度共生矩阵中元素的平方和,用来描述图像的纹理粗细程度。
其计算公式如下:\[ E = \sum_{i=1}^{N}\sum_{j=1}^{N} P(i, j)^2 \]2. 对比度(Contrast)对比度衡量了灰度共生矩阵中不同灰度级对比程度的平均值,其计算公式如下:\[ C = \sum_{i=1}^{N}\sum_{j=1}^{N} (i-j)^2 P(i, j) \]3. 相关性(Correlation)相关性度量了灰度共生矩阵中不同灰度级之间的相关性,其计算公式如下:\[ \mu_x = \sum_{i=1}^{N}\sum_{j=1}^{N} i P(i, j) \]\[ \sigma_x^2 = \sum_{i=1}^{N}\sum_{j=1}^{N} (i - \mu_x)^2 P(i, j) \]\[ \mu_y = \sum_{i=1}^{N}\sum_{j=1}^{N} j P(i, j) \]\[ \sigma_y^2 = \sum_{i=1}^{N}\sum_{j=1}^{N} (j - \mu_y)^2 P(i, j) \]\[ \rho = \frac{\sum_{i=1}^{N}\sum_{j=1}^{N} (i - \mu_x)(j -\mu_y)P(i, j)}{\sigma_x\sigma_y} \]4. 逆差矩(Inverse Difference Moment)逆差矩描述了灰度共生矩阵中不同灰度级的逆差程度,其计算公式如\[ IDM = \sum_{i=1}^{N}\sum_{j=1}^{N} \frac{1}{1+(i-j)^2}P(i, j) \]5. 熵(Entropy)熵用来描述图像的纹理复杂程度,其计算公式如下:\[ EN = -\sum_{i=1}^{N}\sum_{j=1}^{N}P(i, j) \log{P(i,j)} \]6. 惯性(Inertia)惯性描述了灰度共生矩阵中不同灰度级分布的惯性程度,其计算公式如下:\[ I = \sum_{i=1}^{N}\sum_{j=1}^{N} (i-\mu)^2P(i, j) \]7. 聚集度(Cluster Shade)聚集度描述了灰度共生矩阵中灰度级分布的聚集程度,其计算公式如下:\[ CS = \sum_{i=1}^{N}\sum_{j=1}^{N} (i+j-\mu_x-\mu_y)^3 P(i, j) \]8. 聚集度(Cluster Prominence)聚集度描述了灰度共生矩阵中灰度级分布的聚集程度,其计算公式如下:\[ CP = \sum_{i=1}^{N}\sum_{j=1}^{N} (i+j-\mu_x-\mu_y)^4 P(i,9. 最大概率(Maximum Probability)最大概率描述了灰度共生矩阵中灰度级对的概率最大值,其计算公式如下:\[ MP = \max{(P(i, j))} \]10. 反转矩(Inverse Variance)反转矩描述了灰度共生矩阵中不同灰度级的反转程度,其计算公式如下:\[ IV = \sum_{i=1}^{N}\sum_{j=1}^{N} \frac{1}{(i-j)^2}P(i, j) \]11. 自相关度(Autocorrelation)自相关度描述了图像灰度级的自相关程度,其计算公式如下:\[ AC = \sum_{i=1}^{N}\sum_{j=1}^{N} i j P(i, j) \]12. 极大概率(Maximum Probability)极大概率描述了灰度共生矩阵中灰度级的概率最大值,其计算公式如下:\[ MP = \max{(P(i, j))} \]13. 对比度(Contrast)对比度描述了灰度共生矩阵中不同灰度级之间的对比程度,其计算公式如下:\[ C = \sum_{i=1}^{N}\sum_{j=1}^{N} (i-j)^2P(i, j) \]14. 最小概率(Minimum Probability)最小概率描述了灰度共生矩阵中灰度级的概率最小值,其计算公式如下:\[ MP = \min{(P(i, j))} \]四、总结和回顾通过对灰度共生矩阵14个特征计算公式的介绍,我们对灰度共生矩阵的特征提取方法有了更深入的理解。
基于灰度共生矩阵
基于灰度共生矩阵灰度共生矩阵是一种用于描述图像纹理特征的统计方法,它能够揭示图像中不同灰度级之间的空间关系。
本文将以人类的视角,通过描述灰度共生矩阵的原理和应用,使读者能够深入了解这一技术的意义和价值。
在图像处理领域,灰度共生矩阵是一种重要的特征提取方法。
它通过统计图像中灰度级之间的空间关系,捕捉图像中的纹理特征。
通过计算灰度共生矩阵,我们可以得到一系列统计特征,如对比度、均匀度、相关度和能量等,这些特征可以用于图像分类、目标检测和图像识别等应用中。
灰度共生矩阵的计算过程相对简单,首先将图像转换为灰度图像,然后选择一定的灰度级和距离,计算每对像素的共生概率。
共生概率是指某个灰度级在给定距离和方向上与另一个灰度级同时出现的概率。
通过对所有像素对的共生概率进行统计,我们可以得到一个灰度共生矩阵。
灰度共生矩阵可以用于描述图像的纹理特征。
例如,对于一张草地的图像,灰度共生矩阵可以反映出草地纹理的均匀性和统一性。
而对于一张石头的图像,灰度共生矩阵则可以反映出石头表面的粗糙度和不规则性。
基于灰度共生矩阵的应用非常广泛。
在医学影像领域,灰度共生矩阵可以用于肿瘤的早期检测和诊断;在农业领域,灰度共生矩阵可以用于农作物的生长监测和病虫害的识别;在工业领域,灰度共生矩阵可以用于缺陷检测和质量控制。
灰度共生矩阵是一种重要的图像纹理特征提取方法,它可以揭示图像中不同灰度级之间的空间关系。
通过计算灰度共生矩阵,我们可以得到一系列统计特征,用于图像分类、目标检测和图像识别等应用中。
灰度共生矩阵的应用范围非常广泛,包括医学影像、农业和工业等领域。
通过深入了解和应用灰度共生矩阵,我们可以更好地理解和分析图像中的纹理特征,为各个领域的研究和应用提供支持。
希望本文的描述能够使读者更好地理解灰度共生矩阵的原理和应用,并对其在图像处理领域的意义和价值有所了解。
通过引发读者的兴趣,我们可以进一步深入研究和探索灰度共生矩阵的更多应用和发展方向。
cv2灰度共生矩阵提取纹理特征向量
CV2灰度共生矩阵提取纹理特征向量1. 什么是灰度共生矩阵?灰度共生矩阵(Gray-Level Co-occurrence Matrix,GLCM)是用来描述图像纹理特征的一种统计方法。
它描述了图像中不同像素灰度级的空间关系和频率分布,可以用来提取图像的纹理特征。
2. GLCM的计算过程GLCM的计算过程包括: - 首先选择一个特定的偏移量和特定的方向,用来确定像素对的空间关系。
- 然后遍历整个图像,对于每个像素点,与其偏移量确定的相邻像素进行比较,计算它们之间的灰度级对出现的频率。
- 最终得到一个关于灰度级对出现频率的矩阵,即灰度共生矩阵。
3. 灰度共生矩阵的特征灰度共生矩阵提供了丰富的图像纹理信息,可以从中提取多种特征: - 对比度(Contrast):描述了图像中不同灰度级对之间的对比程度。
- 相关性(Correlation):描述了图像中不同灰度级对之间的线性相关程度。
- 能量(Energy):描述了图像中灰度级对出现的频率。
- Homogeneity:描述了图像中灰度级对在空间上的均匀程度。
4. GLCM在图像处理中的应用灰度共生矩阵提取的纹理特征向量可以应用于图像分类、目标识别、医学图像分析等领域。
通过提取图像的纹理特征,可以更准确地描述图像的特性,从而改善图像处理和分析的效果。
5. 个人观点和理解灰度共生矩阵提取纹理特征向量是图像处理中非常重要的一部分。
它不仅可以描述图像的纹理特征,还可以应用于图像识别和分类等领域,为图像处理技术的发展提供了重要的支持。
总结通过灰度共生矩阵提取纹理特征向量,我们可以更好地理解图像的纹理特征,从而在图像处理和分析中取得更好的效果。
在未来的发展中,灰度共生矩阵技术将会得到更广泛的应用,为图像处理领域带来更多的创新。
希望通过本文的介绍,您能对CV2灰度共生矩阵提取纹理特征向量有一个更加深入的理解。
以上是我撰写的关于CV2灰度共生矩阵提取纹理特征向量的文章,希望对您有所帮助。
灰度共生矩阵
灰度共生矩阵(GLCM)共生矩阵用两个位置的象素的联合概率密度来定义,它不仅反映亮度的分布特性,也反映具有同样亮度或接近亮度的象素之间的位置分布特性,是有关图象亮度变化的二阶统计特征。
它是定义一组纹理特征的基础。
一幅图象的灰度共生矩阵能反映出图象灰度关于方向、相邻间隔、变化幅度的综合信息,它是分析图象的局部模式和它们排列规则的基础。
设f(x,y)为一幅二维数字图象,其大小为M× N ,灰度级别为Ng,则满足一定空间关系的灰度共生矩阵为P(i,j)=# {(x1,y1),(x2,y2) ∈M×N ∣ f(x1,y1)=i,f(x2,y2)=j }其中#(x)表示集合X中的元素个数,显然P为Ng×Ng的矩阵,若(x1,y1)与(x2,y2)间距离为d,两者与坐标横轴的夹角为θ,则可以得到各种间距及角度的灰度共生矩阵P(i,j,d,。
)纹理特征提取的一种有效方法是以灰度级的空间相关矩阵即共生矩阵为基础的,因为图像中相距(ΔχΔy的两个灰度像素同时出现的联合频率分布可以用灰度共生矩阵来表示。
若将图像的灰度级定为N级,那么共生矩阵为NXN矩阵,可表示为M(∆X' Δy)(h,k),其中位于(h,k)的元素mhk的值表示一个灰度为h而另一个灰度为k的两个相距为(ΔχΔy的像素对出现的次数。
对粗纹理的区域,其灰度共生矩阵的mhk值较集中于主对角线附近。
因为对于粗纹理,像素对趋于具有相同的灰度。
而对于细纹理的区域,其灰度共生矩阵中的mhk值则散布在各处。
为了能更直观地以共生矩阵描述纹理状况,从共生矩阵导出一些反映矩阵状况的参数,典型的有以下几种:(1)能量:是灰度共生矩阵元素值的平方和,所以也称能量,反映了图像灰度分布均匀程度和纹理粗细度。
如果共生矩阵的所有值均相等,则ASM值小;相反,如果其中一些值大而其它值小,则ASM值大。
当共生矩阵中元素集中分布时,此时ASM值大。
ASM值大表明一种较均一和规则变化的纹理模式。
声音识别技术与算法分析
声音识别技术与算法分析随着科技和人工智能的不断发展,声音识别技术也日益成熟。
声音识别技术是指计算机通过分析声音内容和特征,识别出声音来源和内容的技术。
在现代社会中,声音识别技术可以用于许多领域,例如人机交互、语音识别、智能家居、自动驾驶等等。
一、声音识别技术的原理和发展声音识别技术是基于数字信号处理技术和机器学习算法,通过对声音信号进行分析,提取出声音的特征量,然后通过算法进行匹配和识别。
目前,声音识别技术主要分为两种:关键词识别和语音识别。
关键词识别是指通过对特定关键词进行识别,实现对话的启动和停止等功能。
这种技术通常用于智能语音助手和语音控制系统中,例如Siri、Google Assistant和Amazon Alexa等。
语音识别则是指根据语音内容的处理,分辨并识别出人类语言的基本单元,例如音节、单词或者词组。
这种语音识别技术可广泛应用于安保、客服、翻译、助听器和自动驾驶等领域。
目前,声音识别技术已经得到广泛应用,但其发展依然面临着一些挑战,例如背景噪声、口音、语速、说话声音分析等问题。
未来的发展,将继续加强技术的稳定性和准确度,以更好地满足人类的需求。
二、声音识别技术的算法分析为了更好地利用声音识别技术,算法的精度和准确性非常重要。
下面是几种常用的声音识别算法。
1、基于灰度共生矩阵的算法灰度共生矩阵算法是使用灰度级来描述图像,建立灰度级之间的概率矩阵,通过计算矩阵各项指标来提取图像的纹理特征。
但是在声音识别中,灰度共生矩阵算法的应用不够,因为它只能考虑二维图像的特征,而无法用于声音波形的特征提取。
2、基于卷积神经网络的算法卷积神经网络算法由于其较强的特征提取能力,在声音识别中应用较为广泛。
它通过多层神经网络的层级信息传递,自适应地将各种音频信号的特征信息提取出来,得到对应的类别和预测结果。
卷积神经网络算法对于复杂场景的声音识别具有较强的鲁棒性,可以有效避免噪声的干扰和口音的影响。
3、基于GMM+UBN的算法GMM+UBN算法是一种常用的声音识别算法,其通过对声音数据进行GMM (高斯混合模型)训练,得到各类声音的概率分布信息。
灰度共生矩阵专题(1)
共生矩阵纹理特征常用度量
• 熵
ENT P i, j ln P i, j
i j
若灰度共生矩阵值分布均匀,也即图像近于随机或噪声很大,熵会有较大值。 熵值表明了图像灰度分布的复杂程度,熵值越大图像越复杂。
特征度量的含义:
• 1.熵(ENT)用来描述图像所具有的信息量。纹理也属于 图像的信息,纹理密集的图像熵值较大,反之,纹理稀 疏的图像熵值较小。 2.角二阶矩(ASM)是一种对图像灰度分布均匀性的度量, 当图像灰度分布比较均匀时,ASM值较大;反之,ASM值 则较小。 3.对比度(CON)可以理解为纹理的清晰程度。对于粗纹 理,CON值较小;对于细纹理,CON值较大。
0 0 2 2
7 0 水平方向无重复,变化 7 较快 0
0 0 2 0
水平方向重复多,变化慢,纹理 较粗
1)对角线元素全为0,表明同行灰度变化快
2)对角线元素较大,表明纹理较粗
• 如果对角线上的元素值很大,说明该方向有相距为d的相 同灰度的象素对,如d=1时,则表明有两两灰度相同的象 素对,该方向变化不会很快。
Mean 理解:纹理规则首先保持部分 P i, j 是比较大的, 就比较大(注意i与j的取值)。
共生矩阵纹理特征常用度量
• 方差/标准差
Variance P i, j i Mean
i j 2
Std
P i, j i Mean
i j
共生矩阵纹理特征常用度量
• 对比度度量
CON i j P i, j
2 i j
反映图像清晰度和纹理沟纹的深浅。
理解:若沟纹越深,则图像中灰度值差大的像 素对越多,则CON越大(即灰度共生矩阵中远 离对角线的元素值越大CON越大)。
Matlab中的灰度共生矩阵与纹理分析方法详解
Matlab中的灰度共生矩阵与纹理分析方法详解纹理分析是图像处理和计算机视觉中的一个重要领域,它用于描述和提取图像中的纹理信息。
而在Matlab中,灰度共生矩阵(Gray Level Co-occurrence Matrix, GLCM)是一种常用的纹理分析方法。
本文将详细介绍GLCM的基本原理和应用,并探讨在Matlab中如何使用GLCM进行纹理分析。
第一部分:GLCM的基本原理1.1 GLCM的定义灰度共生矩阵是一种用于描述图像纹理特征的统计矩阵。
它基于图像中像素灰度值之间的统计关系,并计算出像素对之间的灰度值共生概率分布。
GLCM通常使用一个邻域半径来定义像素对,而这个半径可以控制计算纹理特征的尺度。
1.2 GLCM参数与特征在计算GLCM时,有几个常用的参数需要设定,包括像素对的邻域距离、邻域角度、灰度级数目等。
根据这些参数,可以得到一系列的GLCM,并从中提取出各种纹理特征。
常见的GLCM特征包括对比度、相关性、能量和熵等。
第二部分:在Matlab中使用GLCM进行纹理分析2.1 GLCM的计算在Matlab中,可以利用函数graycomatrix来计算图像的GLCM。
该函数需要指定输入图像、邻域距离、邻域角度和灰度级数目等参数。
通过调用该函数,可以得到一个GLCM矩阵。
2.2 GLCM特征的提取利用GLCM矩阵,可以进一步提取各种纹理特征。
在Matlab中,可以使用函数graycoprops来计算GLCM特征。
该函数需要指定GLCM矩阵以及要计算的特征类型。
例如,调用graycoprops(GLCM, 'Contrast')可以计算出GLCM的对比度特征。
2.3 GLCM的应用GLCM在图像处理和计算机视觉中有着广泛的应用。
例如,在医学图像中,可以利用GLCM来分析肿瘤组织的纹理特征,为肿瘤诊断提供依据。
另外,GLCM还可以用于图像分类和识别等领域。
第三部分:GLCM在实际应用中的案例分析3.1 肿瘤组织分析以医学图像中的肿瘤组织分析为例,假设我们有一组CT图像,其中包含正常组织和恶性肿瘤组织。
灰度共生矩阵
1 引言图像识别是随计算机的发展而兴起的一门学科,现已渗透各个领域。
如生物学中的色体特性研究;天文学中的望远镜图像分析;医学中的心电图分析、脑电图分析、医学图像分析;军事领域中的航空摄像分析、雷达和声纳信号检测和分类、自动目标识别等等。
当前,对图像分类识别的常用方法是先提取图像特征,再进行特征值的归类。
图像特征包括几何特征、形状特征、颜色特征、纹理特征等等。
本文主要针对图像的纹理特征进行提取、分析,最后实现具有显著纹理特性的图像的分类识别。
2 图像的纹理特征纹理是景物的一个重要特征。
通常认为纹理是在图像上表现为灰度或颜色分布的某种规律性,这种规律性在不同类别的纹理中有其不同特点。
纹理大致可分为两类:一类是规则纹理,它由明确的纹理基本元素(简称纹理基元)经有规则排列而成,常被称为人工纹理。
另一类是准规则纹理,它们的纹理基元没有明确的形状,而是某种灰度或颜色的分布。
这种分布在空间位置上的反复出现形成纹理,这样的重复在局部范围内往往难以体察出来,只有从整体上才能显露。
这类纹理存在着局部不规则和整体规律性的特点,常被称为自然纹理。
纹理特征可用来描述对象物表面的粗糙程度和它的方向性,也可用来分析生物材料组织,或者用来进行图像分割。
纹理特征提取的方法随纹理类别的不同而不同,一般,规则纹理采用结构分析方法,准规则纹理采用统计分析方法。
3 灰度共生矩阵由于纹理是由灰度分布在空间位置上反复出现而形成的,因而在图像空间中相隔某距离的两象素之间会存在一定的灰度关系,即图像中灰度的空间相关特性。
灰度共生矩阵就是一种通过研究灰度的空间相关特性来描述纹理的常用方法。
3.1 灰度共生矩阵生成灰度直方图是对图像上单个象素具有某个灰度进行统计的结果,而灰度共生矩阵是对图像上保持某距离的两象素分别具有某灰度的状况进行统计得到的。
取图像(N×N)中任意一点(x,y)及偏离它的另一点(x+a,y+b),设该点对的灰度值为(g1,g2)。
图像的灰度共生矩阵
图像的灰度共生矩阵收藏Gray-level co-occurrence matrix from an image图像的灰度共生矩阵灰度共生矩阵是像素距离和角度的矩阵函数,它通过计算图像中一定距离和一定方向的两点灰度之间的相关性,来反映图像在方向、间隔、变化幅度及快慢上的综合信息。
使用方法:glcm = graycomatrix(I)glcms = graycomatrix(I,param1,val1,param2,val2,...)[glcms,SI] = graycomatrix(...)描述:glcms = graycomatrix(I) 产生图像I的灰度共生矩阵GLCM。
它是通过计算两灰度值在图像I 中水平相邻的次数而得到的(也不必是水平相邻的次数,这一参数是可调的,可能通过Offsets来进行调整,比如[0 D]代表是水平方向,[-D D]代表是右上角45度方向,[-D 0]代表是竖直方向,即90度方向,而[-D -D]则代表是左上角,即135度方向),GLCM中的每一个元素(i,j)代表灰度i与灰度j在图像中水平相邻的次数。
因为动态地求取图像的GLCM区间代价过高,我们便首先将灰度值转换到I的灰度区间里。
如果I是一个二值图像,那么灰度共生矩阵就将图像转换到两级。
如果I是一个灰度图像,那将转换到8级。
灰度的级数决定了GLCM的大小尺寸。
你可以通过设定参数“NumLevels”来指定灰度的级数,还可以通过设置“GrayLimits"参数来设置灰度共生矩阵的转换方式。
下图显示了如何求解灰度共生矩阵,以(1,1)点为例,GLCM(1,1)值为1说明只有一对灰度为1的像素水平相邻。
GLCM(1,2)值为2,是因为有两对灰度为1和2的像素水平相邻。
glcms = graycomatrix(I,param1,val1,param2,val2,...) 返回一个或多个灰度灰度共生矩阵,根据指定的参数。
灰度共生矩阵
灰度共生矩阵一.概念及流程纹理特征在地物光谱特征比较相似的时候常作为一种特征用于图像的分类和信息提取,是由灰度分布在空间位置上反复出现而形成的,因而图像空间中相隔某距离的两个像素之间存在一定的灰度关系,即图像中灰度的空间相关特性。
灰度共生矩阵是一种通过研究灰度的空间相关特性来描述纹理的常用方法。
具体描述如下:1)灰度降级,对原始影像进行灰度降级如8,16,32,64等;纹理计算的灰度降级策略来源于IDL的bytscl函数介绍,具体描述如下:图2 灰度降级2)根据设定好的窗口大小,逐窗口计算灰度共生矩阵;3)根据选择的二阶统计量,计算纹理值。
二.纹理算子协同性(GLCM_HOM):对应ENVI的Homogeneity反差性(GLCM_CON):非相似性(GLCM_DIS):均值GLCM_MEAN:对应ENVI的Mean方差GLCM_VAR:对应ENVI的Variance角二阶矩GLCM_ASM:对应ENVI的Second Moment相关性GLCM_COR:对应ENVI的CorrelationGLDV角二阶矩GLDV_ASM:熵GLCM_ENTROPY:对应ENVI的Entropy归一化灰度矢量均值GLDV_MEAN:对应ENVI的Dissimilarity归一化角二阶矩GLDV_CON:对应ENVI的Contrast三.实验报告1:打开ENVI4.5,File->Open Image File,打开实验图像2:Basic Tools->Resize Data(Spatial/Spectral),打开Resize Data I nput File对话框3:选择目标图像,在Spectral Subset中选择第三波段(考虑到第3波段地貌区分比较明显),在Spaial Subset中设置图像剪裁大小,进行剪裁。
分别剪裁出50*50的城区图像一幅与50*50的农区图像一幅,保存至文件。
4:Filter(滤波器)->Texture(纹理)->Co-occurrence Measures(二阶概率统计),打开Texture Input File对话框5:选择剪裁出的城区/农区图像,点击OK,弹出Co-occurrence Texture Parameters对话框6:在Processing Window中设置滤波器窗口大小,在Co-occurrence Shif t中设置对应窗口大小的灰度共生矩阵的距离差分值,Output Result to选择M emory 7:在工具栏选择Basic Tools->Statistics->Compute Statistics,弹出Compute Statistics Input File对话框8:选择第6步输出的Memory,点击OK,再点击一次OK,弹出统计结果9:对比两个纹理图像,在不同滤波窗口大小下不同距离差分下的统计结果,将各个统计结果中的统计均值Mean记录在表格上,做出图表,进行讨论。
python灰度共生矩阵提取纹理特征
Python灰度共生矩阵提取纹理特征1.介绍在计算机视觉和图像处理领域,纹理特征是用来描述图像中物体表面细节的重要特征之一。
纹理特征可以提供关于图像物体的结构、形状、纹理、模式等信息。
其中,灰度共生矩阵(Gray Level Co-occurrence Matrix, GLCM)是一种常见的用于提取纹理特征的方法。
2.灰度共生矩阵概述灰度共生矩阵是通过计算图像中不同像素对之间的关系统计信息,来表示图像纹理特征的方法之一。
它的原理是统计图像中某一像素与其相邻指定距离和指定方向的像素对之间的灰度级组合出现的频率。
灰度共生矩阵通常是一个对称的二维矩阵,其维度取决于图像的灰度级数目。
每个矩阵元素表示了对应灰度级组合出现的频率。
常用的灰度共生矩阵特征包括:能量(Energy)、对比度(Contrast)、相关性(Correlation)和熵(Entropy)等。
3.Python中的灰度共生矩阵提取纹理特征Python提供了丰富的图像处理库和工具,用于实现灰度共生矩阵的计算和纹理特征的提取。
下面是使用Python进行灰度共生矩阵和纹理特征提取的基本步骤和代码示例:我们需要加载图像并将其转换为灰度图像,这可以通过使用Python的图像处理库如OpenCV或PIL来实现。
以下是加载图像并转换为灰度图像的示例代码:import cv2# 读取图像image = cv2.imread('image.jpg')# 转换为灰度图像gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)接下来,我们可以使用灰度图像计算灰度共生矩阵,并提取纹理特征。
对于灰度图像的灰度共生矩阵计算,可以使用Python的skimage库或Mahotas库。
以下是计算灰度共生矩阵的示例代码:import numpy as npfrom skimage.feature import greycomatrix, greycoprops# 计算灰度共生矩阵glcm = greycomatrix(gray_image, [1], [0], levels=256, symmetric=True, normed=T rue)# 提取纹理特征 - 能量energy = greycoprops(glcm, 'energy')# 提取纹理特征 - 对比度contrast = greycoprops(glcm, 'contrast')# 提取纹理特征 - 相关性correlation = greycoprops(glcm, 'correlation')# 提取纹理特征 - 熵entropy = greycoprops(glcm, 'homogeneity')我们可以将提取到的纹理特征进行进一步的分析、处理和应用。
matlab对灰度共生矩阵特征值的计算
matlab对灰度共生矩阵特征值的计算文章标题:深度解析:Matlab对灰度共生矩阵特征值的计算在图像处理领域,灰度共生矩阵(GLCM)是一种常用的描述图像纹理特征的方法。
GLCM 可以用来描述图像中相邻像素灰度级别之间的空间关系,并通过计算一系列特征值来量化图像的纹理特征。
在Matlab中,计算灰度共生矩阵特征值是图像处理的重要一环,本文将深度讨论这一过程。
一、灰度共生矩阵(GLCM)概述灰度共生矩阵是指在图像中,特定相对位置的两个像素点在灰度级上的关系。
它能够描述图像的纹理特征,包括对比度、能量、惯性、熵等。
在Matlab中,计算GLCM的方法主要有基于像素距离和角度的共生矩阵生成函数,例如graycomatrix(),返回一个包含灰度共生矩阵的矩阵。
二、灰度共生矩阵特征值的计算灰度共生矩阵的特征值计算是图像纹理特征分析的重要步骤。
在Matlab中,可以使用graycoprops()函数来计算GLCM的特征值,包括对比度、能量、惯性、熵等。
对比度度量了图像中灰度级变化的程度,能量度量了图像的纹理粗细程度,惯性度量了图像的纹理方向性,熵度量了图像的不确定性。
三、个人观点与理解对于灰度共生矩阵特征值的计算,我认为可以通过Matlab的相关函数轻松实现,但在实际应用中需要根据具体图像的特点和需求来选择合适的特征值。
在处理纹理特征分析时,对于不同类型的图像可能需要调整GLCM特征值的计算参数,以获得更加准确的纹理描述。
在计算过程中需要考虑计算复杂度和精度的权衡,尤其对于大尺寸的图像处理,需要充分考虑计算效率。
总结回顾本文深度探讨了在Matlab中对灰度共生矩阵特征值的计算过程。
通过灰度共生矩阵描述的图像纹理特征分析,我们可以更准确地定量描述图像纹理特征,为图像分类、识别和分割提供了重要依据。
在实际应用中,需要根据具体图像的特点和需求来选择合适的GLCM特征值,以获得更准确的纹理描述,并在计算过程中充分考虑计算效率和精度的平衡。
灰度共生矩阵
灰度共生矩阵灰度共生矩阵定义为像素对的联合分布概率,是一个对称矩阵,它不仅反映图像灰度在相邻的方向、相邻间隔、变化幅度的综合信息,但也反映了相同的灰度级像素之间的位置分布特征,是计算纹理特征的基础。
设f(x,y)为一幅数字图像,其大小为M×N,灰度级别为Ng,则满足一定空间关系的灰度共生矩阵为:其中#(x)表示集合x中的元素个数,显然P为Ng×Ng的矩阵,若(x1,y1)与(x2,y2)间距离为d,两者与坐标横轴的夹角为θ,则可以得到各种间距及角度的灰度共生矩阵(i,j,d,θ)。
其中元素(i,j)的值表示一个灰度为i,另一个灰度为j的两个相距为d的像素对在角的方向上出现的次数。
在计算得到共生矩阵之后,往往不是直接应用计算的灰度共生矩阵,而是在此基础上计算纹理特征量,我们经常用反差、能量、熵、相关性等特征量来表示纹理特征。
(1) 反差:又称为对比度,度量矩阵的值是如何分布和图像中局部变化的多少,反应了图像的清晰度和纹理的沟纹深浅。
纹理的沟纹越深,反差越大,效果清晰;反之,对比值小,则沟纹浅,效果模糊。
(2) 能量:是灰度共生矩阵各元素值的平方和,是对图像纹理的灰度变化稳定程度的度量,反应了图像灰度分布均匀程度和纹理粗细度。
能量值大表明当前纹理是一种规则变化较为稳定的纹理。
(3) 熵:是图像包含信息量的随机性度量。
当共生矩阵中所有值均相等或者像素值表现出最大的随机性时,熵最大;因此熵值表明了图像灰度分布的复杂程度,熵值越大,图像越复杂。
(4) 相关性:也称为同质性,用来度量图像的灰度级在行或列方向上的相似程度,因此值的大小反应了局部灰度相关性,值越大,相关性也越大。
应用由上面的叙述知道,可以根据各种间距和角度计算灰度共生矩阵,下面程序中给定了间距,根据传入的参数计算:#define GLCM_DIS 3 //灰度共生矩阵的统计距离#define GLCM_CLASS 16 //计算灰度共生矩阵的图像灰度值等级化#define GLCM_ANGLE_HORIZATION 0 //水平#define GLCM_ANGLE_VERTICAL 1 //垂直#define GLCM_ANGLE_DIGONAL 2 //对角int calGLCM(IplImage* bWavelet,int angleDirection,double* featureVector){int i,j;int width,height;if(NULL == bWavelet)return 1;width = bWavelet->width;height = bWavelet->height;int * glcm = new int[GLCM_CLASS * GLCM_CLASS];int * histImage = new int[width * height];if(NULL == glcm || NULL == histImage)return 2;//灰度等级化---分GLCM_CLASS个等级uchar *data =(uchar*) bWavelet->imageData;for(i = 0;i < height;i++){for(j = 0;j < width;j++){histImage[i * width + j] = (int)(data[bWavelet->widthStep * i + j] * GLCM_CLASS / 256);}}//初始化共生矩阵for (i = 0;i < GLCM_CLASS;i++)for (j = 0;j < GLCM_CLASS;j++)glcm[i * GLCM_CLASS + j] = 0;//计算灰度共生矩阵int w,k,l;//水平方向if(angleDirection == GLCM_ANGLE_HORIZATION){for (i = 0;i < height;i++){for (j = 0;j < width;j++){l = histImage[i * width + j];if(j + GLCM_DIS >= 0 && j + GLCM_DIS < width){k = histImage[i * width + j + GLCM_DIS];glcm[l * GLCM_CLASS + k]++;}if(j - GLCM_DIS >= 0 && j - GLCM_DIS < width){k = histImage[i * width + j - GLCM_DIS];glcm[l * GLCM_CLASS + k]++;}}}}//垂直方向else if(angleDirection == GLCM_ANGLE_VERTICAL){for (i = 0;i < height;i++){for (j = 0;j < width;j++){l = histImage[i * width + j];if(i + GLCM_DIS >= 0 && i + GLCM_DIS < height){k = histImage[(i + GLCM_DIS) * width + j];glcm[l * GLCM_CLASS + k]++;}if(i - GLCM_DIS >= 0 && i - GLCM_DIS < height){k = histImage[(i - GLCM_DIS) * width + j];glcm[l * GLCM_CLASS + k]++;}}}}//对角方向else if(angleDirection == GLCM_ANGLE_DIGONAL){for (i = 0;i < height;i++){for (j = 0;j < width;j++){l = histImage[i * width + j];if(j + GLCM_DIS >= 0 && j + GLCM_DIS < width && i + GLCM_DIS >= 0 && i + GLCM_DIS < height){k = histImage[(i + GLCM_DIS) * width + j + GLCM_DIS];glcm[l * GLCM_CLASS + k]++;}if(j - GLCM_DIS >= 0 && j - GLCM_DIS < width && i - GLCM_DIS >= 0 && i - GLCM_DIS < height){k = histImage[(i - GLCM_DIS) * width + j - GLCM_DIS];glcm[l * GLCM_CLASS + k]++;}}}}//计算特征值double entropy = 0,energy = 0,contrast = 0,homogenity = 0;for (i = 0;i < GLCM_CLASS;i++){for (j = 0;j < GLCM_CLASS;j++){//熵if(glcm[i * GLCM_CLASS + j] > 0)entropy -= glcm[i * GLCM_CLASS + j] * log10(double(glcm[i * GLCM_CLASS + j]));//能量energy += glcm[i * GLCM_CLASS + j] * glcm[i * GLCM_CLASS + j];//对比度contrast += (i - j) * (i - j) * glcm[i * GLCM_CLASS + j];//一致性homogenity += 1.0 / (1 + (i - j) * (i - j)) * glcm[i * GLCM_CLASS + j];}}//返回特征值i = 0;featureVector[i++] = entropy;featureVector[i++] = energy;featureVector[i++] = contrast;featureVector[i++] = homogenity;delete[] glcm;delete[] histImage;return 0;。
灰度共生矩阵的计算
灰度共生矩阵的计算
灰度共生矩阵的计算方法如下:
1. 定义图像中点(x,y)以及偏移它的点(x+a,y+b)(此处a=1,b=0,计算的是水平相邻),该点对的灰度阶值为(0,1)的个数。
2. 灰度共生矩阵是方阵,矩阵的行数是图像灰度的等级。
3. 灰度共生矩阵计算方法示意图:图中红框框出来的灰度共生矩阵中的值计算的是定义中图像中点(x,y)以及偏移它的点(x+a,y+b)(此处a=1,b=0,计算的是水平相邻),该点对的灰度阶值为(0,1)的个数。
4. 最后再通过具体的公式和矩阵计算方式来得到G(i,j),即可得到灰度共生矩阵。
以上信息仅供参考,建议咨询专业人士获取具体帮助。
灰度共生矩阵
灰度共生矩阵灰度共生矩阵一.概念及流程纹理特征在地物光谱特征比较相似的时候常作为一种特征用于图像的分类和信息提取,是由灰度分布在空间位置上反复出现而形成的,因而图像空间中相隔某距离的两个像素之间存在一定的灰度关系,即图像中灰度的空间相关特性。
灰度共生矩阵是一种通过研究灰度的空间相关特性来描述纹理的常用方法。
具体描述如下:1)灰度降级,对原始影像进行灰度降级如8,16,32,64等;纹理计算的灰度降级策略来源于IDL的bytscl函数介绍,具体描述如下:图2 灰度降级2)根据设定好的窗口大小,逐窗口计算灰度共生矩阵;3)根据选择的二阶统计量,计算纹理值。
二.纹理算子协同性(GLCM_HOM):对应ENVI的Homogeneity反差性(GLCM_CON):非相似性(GLCM_DIS):均值GLCM_MEAN:对应ENVI的Mean方差GLCM_VAR:对应ENVI的Variance角二阶矩GLCM_ASM:对应ENVI的Second Moment相关性GLCM_COR:对应ENVI的CorrelationGLDV角二阶矩GLDV_ASM:熵GLCM_ENTROPY:对应ENVI的Entropy归一化灰度矢量均值GLDV_MEAN:对应ENVI的Dissimilarity归一化角二阶矩GLDV_CON:对应ENVI的Contrast三.实验报告1:打开ENVI4.5,File->Open Image File,打开实验图像2:Basic T ools->Resize Data(Spatial/Spectral),打开Resize Data I nput File对话框3:选择目标图像,在Spectral Subset中选择第三波段(考虑到第3波段地貌区分比较明显),在Spaial Subset中设置图像剪裁大小,进行剪裁。
分别剪裁出50*50的城区图像一幅与50*50的农区图像一幅,保存至文件。
r语言计算灰度共生矩阵
灰度共生矩阵(GLCM)是一种常用于图像处理和计算机视觉的技术,用于描述图像中像素之间的空间关系。
在R语言中,可以使用 `glcm` 包来计算灰度共生矩阵。
以下是一个简单的示例,说明如何在R中计算灰度共生矩阵: 1. 首先,安装和加载 `glcm` 包:
```r
install.packages("glcm")
library(glcm)
```
2. 读取图像并将其转换为灰度图像:
```r
# 读取图像
img <- readImage("path_to_your_image.jpg")
# 将图像转换为灰度图像
img_gray <- rgb2gray(img)
```
3. 计算灰度共生矩阵:
```r
# 指定像素间距(例如,1)
spacing <- 1
# 计算灰度共生矩阵
glcm_matrix <- glcmMatrix(img_gray, spacing = spacing) ```
4. 查看灰度共生矩阵:
```r
# 打印灰度共生矩阵
print(glcm_matrix)
```
5. 使用灰度共生矩阵进行进一步分析,例如计算相关性:
```r
# 计算相关性
correlation <- correlation(glcm_matrix)
print(correlation)
```
请注意,上述代码中的 `"path_to_your_image.jpg"` 应替换为您要分析的图像的实际路径。
此外,您还可以根据需要调整像素间距。
灰度共生矩阵解题思路
灰度共生矩阵解题思路
一、确定灰度级
在进行灰度共生矩阵分析之前,需要先确定图像的灰度级。
灰度级决定了图像的亮度范围,通常取值范围在0-255之间。
在确定灰度级时,可以根据图像的实际情况进行调整,以保证图像的细节和对比度。
二、计算距离
在灰度共生矩阵中,距离是一个重要的参数。
它表示两个像素点之间的距离,通常取值范围在0-1之间。
在计算距离时,可以根据实际情况进行调整,以保证灰度共生矩阵的准确性和可靠性。
三、生成矩阵
生成灰度共生矩阵是解题的关键步骤之一。
根据灰度级和距离参数,可以计算出所有像素点之间的距离,并构建一个二维矩阵。
矩阵中的每个元素表示两个像素点之间的距离出现的次数或概率。
四、计算特征值
特征值是灰度共生矩阵中的一个重要概念,它可以反映图像的纹理特征。
常见的特征值包括能量、熵、对比度和相关性等。
通过计算这些特征值,可以对图像的纹理进行定量描述和分析。
五、判断纹理
判断纹理是灰度共生矩阵解题的最终目的。
根据计算出的特征值,可以对图像的纹理进行分类、识别和比较。
例如,可以利用灰度共生矩阵分析图像中的边缘、纹理和噪声等特征,为图像处理和计算机视觉等领域提供有力的支持。
总之,灰度共生矩阵是一种有效的图像处理和分析方法,它可以用于描述和比较图像中的纹理特征。
通过掌握灰度共生矩阵的解题思路和方法,可以为相关领域的研究和应用提供有力的帮助。
opencv 灰度共生矩
opencv 灰度共生矩灰度共生矩阵(Gray-Level Co-occurrence Matrix,简称GLCM)是一种用于图像处理和分析的统计工具,它能够描述图像中像素灰度级之间的空间关系。
GLCM的应用领域广泛,包括纹理分析、图像分类、目标识别等。
GLCM基于图像的灰度级别,通过计算像素之间的相邻关系来构建矩阵。
在计算GLCM时,首先需要定义一个灰度方向,例如水平方向、垂直方向、45度方向和135度方向。
然后,对于每个像素,统计其与相邻像素在指定方向上的灰度级别共现次数。
这些共现次数构成了GLCM矩阵的元素。
GLCM矩阵的维度与图像的灰度级别数目相关。
通常情况下,灰度级别数目为N的图像将生成一个N×N的GLCM矩阵。
矩阵的每个元素(i,j)表示在给定方向上,灰度级别为i的像素与灰度级别为j的像素共现的次数。
因此,GLCM矩阵是一个对称矩阵。
除了共现次数,GLCM矩阵还可以计算一些统计特征,用于描述图像的纹理特征。
常用的统计特征包括能量(Energy)、对比度(Contrast)、相关性(Correlation)和熵(Entropy)等。
这些特征可以通过对GLCM矩阵进行数学运算得到。
GLCM在纹理分析中的应用非常广泛。
通过计算GLCM矩阵和统计特征,可以量化图像的纹理信息,进而用于图像分类、目标识别等任务。
例如,在医学图像处理中,通过分析肿瘤区域的纹理特征,可以帮助医生诊断疾病。
在工业检测中,通过分析材料表面的纹理特征,可以检测产品的质量。
GLCM的计算可以通过编程实现。
OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和分析函数。
OpenCV中包含了计算GLCM矩阵和统计特征的函数,可以方便地应用于实际项目中。
通过使用OpenCV,我们可以快速计算图像的GLCM矩阵,并提取出感兴趣的纹理特征。
灰度共生矩阵是一种用于描述图像纹理特征的统计工具。
通过计算像素之间的共现次数,GLCM能够量化图像的纹理信息,并提取出一系列统计特征。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像理解与分析中灰度共生矩阵算法1作者:冰封蓝羽 2006-04-11 16:49:54标签:图像理解与分析中灰度共生矩阵算法周一早上图像理解与分析课上,朱启疆老师讲了灰度共生矩阵算法,回去后我编程实现了这个算法。
内容如下:共有matrix.cpp d_matrix.h d_exept.h mat.txt四个文件//matrix.cpp/*Visual C++ 6.0matrixdesigned by bfly*/#include <iostream>#include <fstream>#include <cstdlib>#include <cmath>#include <vector>#include "d_matrix.h"template <typename T>void outputmat(const matrix<T>& mat);template <typename T>int classifymat(const matrix<T>& mat);template <typename T>void transformmat(const matrix<T>& formermat, matrix<T>& lattermat);template <typename T>void probablitymat(const matrix<T>& mat,matrix<T>& probmat);template <typename T>void typicalarguement(const matrix<T>& mat,const matrix<T>& probmat); using namespace std;int main(){//input matrixmatrix<float> initMat;int numRows, numCols;int i, j;ifstream fin("mat.txt");if(!fin){cerr << "Cannot open 'mat.txt'" << endl;exit(1);}fin >> numRows >> numCols;initMat.resize(numRows, numCols);for(i = 0; i < numRows; i++){for(j = 0; j < numCols; j++){fin >> initMat[i][j];}}//transform matrix to tempMatint counter=classifymat(initMat);matrix<float> tempMat;tempMat.resize(counter, counter);transformmat(initMat, tempMat);outputmat(tempMat);//transform matrix to probMatmatrix<float> probMat;probMat.resize(counter, counter);probablitymat(tempMat, probMat);outputmat(probMat);cout << endl;//output the typicalarguementstypicalarguement(tempMat, probMat);return 0;}//outputmat matrix functriontemplate <typename T>void outputmat(const matrix<T>& mat){int i, j;for(i = 0; i < mat.rows(); i++){for(j = 0; j < mat.cols(); j++){cout << mat[i][j] << " ";}cout << endl;}}//classifymat matrix functiontemplate <typename T>int classifymat(const matrix<T>& mat){vector<T> memoryval;memoryval.push_back(mat[0][0]);int counter=1;bool flag = false;int i, j;for(i = 0; i < mat.rows(); i++){for(j = 0; j < mat.cols(); j++){for(int m = 0; m < memoryval.size(); m++) {if(mat[i][j] == memoryval[m])flag = true;}if(!flag){memoryval.push_back(mat[i][j]);counter++;}flag = false;}}return counter;}//transformmat matrix functiontemplate <typename T>void transformmat(const matrix<T>& formermat, matrix<T>& lattermat) {cout << "Plesase enter a and b: ";int a, b;int matval = 0;cin >> a >> b;int i, j, m, n;for(i = 0; i < lattermat.rows(); i++){for(j = 0; j < lattermat.cols(); j++){for(m = 0; m < formermat.rows(); m++){for(n = 0; n < formermat.cols(); n++){if(formermat[m][n]==i){if(((m+a) < formermat.rows()) && ((n+b) < formermat.cols())) {if(formermat[m+a][n+b] == j){matval++;}}}}}lattermat[i][j]=matval;matval=0;}}}//probablitymat matrix functiontemplate <typename T>void probablitymat(const matrix<T>& mat,matrix<T>& probmat){T sum = T();int i, j;for(i = 0; i < mat.rows(); i++)for(j = 0; j < mat.cols(); j++){sum += mat[i][j];}}for(i = 0; i < mat.rows(); i++){for(j = 0; j < mat.cols(); j++){probmat[i][j] = mat[i][j]/sum;}cout << endl;}}//typicalarguementstemplate <typename T>void typicalarguement(const matrix<T>& mat,const matrix<T>& probmat){T e = T(), H = T(), C = T(),I = T(), mean = T(), stdvar = T(), sum = T(), var = T();T M = T();int i, j;//typicalargument efor(i = 0; i < probmat.rows(); i++){for(j = 0; j < probmat.cols(); j++){e += probmat[i][j]*probmat[i][j];}}//typicalargument Hfor(i = 0; i < probmat.rows(); i++){for(j = 0; j < probmat.cols(); j++){H += probmat[i][j]*log(probmat[i][j])/log(10.0);}}H = -H;//typicalargument sumfor(i = 0; i < mat.rows(); i++)for(j = 0; j < mat.cols(); j++){sum += mat[i][j];}}//typicalargument meanmean = sum/(mat.rows()*mat.cols());//typicalargument varfor(i = 0; i < mat.rows(); i++){for(j = 0; j < mat.cols(); j++){var += (mat[i][j]-mean)*(mat[i][j]-mean);}}//typicalargument stdvarstdvar=sqrt(var);//typicalargument Cfor(i = 0; i < probmat.rows(); i++){for(j = 0; j < probmat.cols(); j++){C += (i - mean)*(j - mean)*probmat[i][j];}}C /= (stdvar*stdvar);//typicalargument Mfor(i = 0; i < probmat.rows(); i++){for(j = 0; j < probmat.cols(); j++){M += (probmat[i][j]/ (1 + (i - j)*(i - j))); }}//typicalargument Ifor(i = 0; i < probmat.rows(); i++){for(j = 0; j < probmat.cols(); j++){I += (i - j)*(i -j)*probmat[i][j];}}//output typicalargumentscout<<" 能量e = "<< e <<endl;cout<<" 熵H = "<< H <<endl;cout<<" 相关性C = "<< C <<endl;cout<<" 局部均匀性M = "<< M <<endl; cout<<" 惯性I = "<< I <<endl;}indexRangeError(const string& msg, int i, int size):baseException(){char indexString[80];ostrstream indexErr(indexString, 80);indexErr << msg << " index " << i << " size = " << size << ends; // indexRangeError can modify msgString, since it is in// the protected section of baseExceptionmsgString = indexString;}};// attempt to erase from an empty containerclass underflowError: public baseException{public:underflowError(const string& msg = ""):baseException(msg){}};// attempt to insert into a full containerclass overflowError: public baseException{public:overflowError(const string& msg = ""):baseException(msg){}};// error in expression evaluationclass expressionError: public baseException{public:expressionError(const string& msg = ""):baseException(msg){}};// bad object referenceclass referenceError: public baseException{public:referenceError(const string& msg = ""):baseException(msg){}};// feature not implementedclass notImplementedError: public baseException{public:notImplementedError(const string& msg = ""):baseException(msg){}};// date errorsclass dateError: public baseException{public:dateError(const string& first, int v, const string& last): baseException(){char dateStr[80];ostrstream dateErr(dateStr, 80);dateErr << first << ' ' << v << ' ' << last << ends;// dateError can modify msgString, since it is in// the protected section of baseExceptionmsgString = dateStr;}};// error in graph classclass graphError: public baseException{public:graphError(const string& msg = ""):baseException(msg){}};// file open errorclass fileOpenError: public baseException{public:fileOpenError(const string& fname):baseException()。