1. 灰度共生矩阵GLCM基础原理第一次接触灰度共生矩阵时我也被那些数学公式绕得头晕。但后来发现这东西本质上就是个像素关系记录本。想象你拿着放大镜观察布料纹理GLCM就是在统计某个灰度的像素点旁边出现另一个灰度像素的概率有多大具体来说GLCM会记录两个关键参数像素间距d和方向θ。比如设定d1、θ0°时就是统计每个像素右边相邻像素的灰度组合出现的次数。我在处理金属表面图像时常用以下四种方向组合水平方向0°垂直方向90°45度对角线135度对角线通过实验发现工业检测中d1~3的效果最好。距离太大会丢失细节太小又容易受噪声影响。这里有个实用技巧可以先计算不同d值下的特征曲线选择特征值变化平稳的区间。2. 工业质检中的纹理缺陷检测实战去年帮一家汽车零部件厂做轮毂表面检测时GLCM的对比度特征立了大功。正常轮毂表面纹理均匀而划痕会导致局部对比度突增。我们是这样搭建系统的2.1 金属表面检测方案图像采集使用500万像素工业相机配合环形光源消除反光预处理# 伽马校正增强纹理 gamma 1.5 lookUpTable np.array([((i / 255.0) ** gamma) * 255 for i in np.arange(0, 256)]).astype(uint8) img_gamma cv2.LUT(raw_img, lookUpTable)特征选择对比度熵的组合对划痕最敏感阈值设定通过200个正负样本统计对比度35判定为缺陷2.2 织物检测的特殊处理纺织品的纹理检测有个坑——布料本身的经纬线会产生周期性纹理。我的解决方案是先做傅里叶变换滤除基频再用GLCM分析残余纹理能量特征值低于0.15时判定为瑕疵3. 医学影像的肿瘤识别应用在肺结节CT分析项目中GLCM特征比传统形态学特征准确率提升了12%。关键发现是恶性肿瘤的熵值通常5.8良性结节的同质性0.72使用3D GLCM比2D效果更好但计算量增大这里分享一个处理DICOM文件的技巧import pydicom ds pydicom.dcmread(CT.dcm) img ds.pixel_array.astype(float) img (img - img.min()) / (img.max() - img.min()) * 2554. 关键特征量工程实践经过多个项目验证这几个特征最实用特征量工业应用医学应用计算优化技巧对比度划痕/裂纹检测肿瘤边缘识别使用积分图加速计算熵材料均匀性评估恶性程度分级查表法替代log运算相关性纺织纤维走向分析组织纤维化检测均值预计算逆方差表面粗糙度测量钙化点检测并行计算各方向实际项目中建议先用PCA分析特征重要性。曾有个案例只用前3个主成分就达到了95%的准确率。5. 性能优化与常见问题在部署到嵌入式设备时我总结了几条加速经验降低灰度级从256级降到16级速度提升8倍使用Cython重写核心代码多角度特征合并时采用近似计算踩过的坑提醒光照不均会导致特征漂移务必先做白平衡旋转样本不足时建议使用LBPGLCM组合OpenCV的GLCM实现有内存泄漏风险建议自己实现最后附上工业级优化的特征计算代码def fast_glcm(img, d1, levels16): h,w img.shape glcm np.zeros((levels,levels), dtypenp.float32) # 使用查表法加速 lut np.zeros(256, dtypenp.uint8) for i in range(levels): lut[i*256//levels : (i1)*256//levels] i img lut[img] # 向量化计算 for y in range(h-d): for x in range(w-d): i img[y,x] j img[yd,xd] glcm[i,j] 1 glcm / glcm.sum() return glcm