灰度共生矩阵算法

合集下载

灰度共生矩阵

灰度共生矩阵

灰度共⽣矩阵⼀、基本理论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个特征计算公式一、前言在图像处理和分析领域,灰度共生矩阵是一种重要的特征提取方法。

它能够描述图像中像素之间的灰度分布关系,对于图像的纹理特征分析有着重要的作用。

在本文中,我们将深入探讨灰度共生矩阵的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灰度共生矩阵提取纹理特征向量

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)

灰度共生矩阵专题(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中的灰度共生矩阵与纹理分析方法详解纹理分析是图像处理和计算机视觉中的一个重要领域,它用于描述和提取图像中的纹理信息。

而在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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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()。

相关文档
最新文档