Mahotas中Haralick纹理特征Correlation计算及ux均值疑问
关于Mahotas中Haralick特征边缘均值计算的疑问解答
我在对比Python(Mahotas)与C++实现的两款Haralick纹理特征计算器时,发现部分特征结果一致,但Correlation等特征结果存在差异。现在需要解释Mahotas的texture.py中ux = np.dot(px, k)为何等价于边缘概率矩阵的均值,相关代码如下:
# cmat is the square co-ocurrence matrix T = cmat.sum() maxv = len(cmat) k = np.arange(maxv) p = cmat / float(T) px = p.sum(0) ux = np.dot(px, k)
代码逻辑拆解与均值等价性说明
- 归一化联合概率矩阵:
p = cmat / float(T)将共生矩阵cmat转换为联合概率分布,其中p[i][j]代表像素对取(i,j)的概率,T是共生矩阵的总元素和(即所有像素对的数量)。 - 计算边缘概率分布:
px = p.sum(0)对联合概率矩阵按列求和,得到的px是第一个维度(或x方向)像素的边缘概率分布——px[k]表示单个像素取值为k的概率。 - 均值的数学定义:边缘概率分布的均值公式为
Σ(灰度值k * 对应概率px[k]),而np.dot(px, k)正是对两个一维数组做对应元素相乘后累加,完全匹配这个均值计算逻辑。
简单说,np.dot(px, k)就是用向量点积的方式高效实现了边缘概率分布的均值计算,和手动遍历每个灰度值乘以概率再求和的结果完全一致。
如果Correlation特征结果存在差异,建议检查双方在均值、方差这类基础统计量的计算细节:比如灰度值的取值范围是否一致、边缘概率的求和方向(行/列)是否对应、归一化的时机是否相同等。
内容的提问来源于stack exchange,提问作者patch0110
相关产品推荐
相关产品推荐

