提取GLCM特征时按4×4分块计算的算法理解是否正确?
算法理解准确性判断
你对该纹理提取算法核心逻辑的理解基本正确,核心的「4×4网格划分→逐块计算GLCM→提取对应纹理属性」流程和论文要求是匹配的,但存在几个需要核对的差异点:
- 你在代码中额外加入了
5×5高斯模糊的预处理步骤,需要确认原论文是否有对应的预处理要求,该操作会平滑图像的高频纹理信息,和直接在原图灰度图上提取的特征会存在偏差。 - 你当前使用的是无重叠的网格划分(步长等于块大小4),如果原论文要求采用重叠滑动窗口计算GLCM,当前实现的划分逻辑不符合要求。
- GLCM参数(距离为1、4个计算方向、对称归一化、5个提取属性)如果和论文参数要求一致,这部分实现是正确的。
现有实现的疏漏点
- 边界块兼容问题:当前代码没有做边界块适配,若后续处理非4整数倍尺寸的图像,边缘位置的块尺寸会小于4×4,
greycomatrix处理小尺寸块时会输出不符合预期的GLCM矩阵,建议提前对图像做边缘填充/裁剪,保证所有块尺寸统一为4×4。 - 特征后处理缺失:当前实现仅输出了所有块的特征拼接结果,单张图像的特征维度高达
6144块 × 5属性 × 4方向 = 122880维,维度极高,大概率遗漏了原论文中后续的特征聚合、降维步骤,建议回头核对论文的特征后处理环节。
计算量优化建议
- 用
numba的@njit装饰器加速双重循环部分,或者改用numpy向量化操作实现块划分和GLCM计算,单进程速度可提升5~15倍。 - 采用多进程并行处理,可直接对900张图像做并行调度,也可对单张图像的块级GLCM计算做并行拆分,算力足够的情况下可将整体处理时间压缩到原来的1/N(N为核心数)。
- 若精度允许,可调整块大小为8×8/16×16,或者增大网格划分步长降低块数量,计算量会成倍下降。
内容的提问来源于stack exchange,提问作者XXDIL
相关产品推荐
相关产品推荐

