图像处理 – GLCM灰度共生矩阵如何计算

图像处理 – GLCM灰度共生矩阵如何计算因为最近要在 OpenCV 上试试各种图像分割算法的效果 其中灰度共生算法没有办法直接调用库函数 看了很多文章 其中有一篇博文讲的很清楚 原文地址现在按照自己的理解再复盘一遍算法过程 详细推导一下 有一些是上面那个博文搬过来的 本文只是学习笔记 以便日后查询使用 在计算灰度共生矩阵前需要确定一些参数 灰度共生矩阵灰度级 与灰度共生矩阵的阶数相同 即当灰度图像灰度级为 N 时 灰度共生矩阵为

因为最近要在OpenCV上试试各种图像分割算法的效果,其中灰度共生算法没有办法直接调用库函数实现,看了很多文章,其中有一篇博文讲的很清楚。博主有提供原理和源码,大家可以直接看原博。

原文地址:纹理特征提取方法:LBP, 灰度共生矩阵

我现在按照自己的理解以代码逻辑再复盘一遍算法过程,详细推导一遍,有一些是上面那个博文搬过来的,本文只是学习笔记,以便日后查询使用。

// 在计算灰度共生矩阵前需要确定一些参数:

  1. 灰度共生矩阵灰度级,与灰度共生矩阵的阶数相同,即当灰度图像灰度级为N时,灰度共生矩阵为N × N的矩阵。一般一幅图的灰度级有256级,0-255,但由于计算量大,一般选取4、8、16作为灰度级;
  2. 滑动窗口尺寸,即每次计算特征值所选用的窗口矩阵大小,一般选取5×5或7×7;
  3. 方向选择:计算灰度共生矩阵的方向一般为0°,45°,90°,135°四个方向;求出四个方向矩阵的特征值后,可以通过计算四个特征值的平均值作为最终特征值共生矩阵;
  4. 步距d:一般选择d = 1,即中心像素直接与其相邻像素点做比较运算;
  5. 为了解释说明方便,用N=4个灰度级,7*7窗口矩阵作为示例。

// 具体步骤如下:

1. 将原图灰度量化

A. d=1,求0°方向矩阵A的共生矩阵
水平方向
则按照0°方向(即水平方向从左向右,从右向左两个方向),共有以下几种情况:
1/ 统计矩阵值(0, 1),则如下图所示:
在这里插入图片描述
此时满足矩阵值(0,1)统计条件的值,共有10个,所以该窗口对应的GLCM统计矩阵的(0, 1)和(1, 0)位置元素的值即为10。




4/ 统计矩阵值( 3,0),则如下图所示:

在这里插入图片描述
此时满足矩阵值(3,0)统计条件的值,共有10个,所以该窗口对应的GLCM统计矩阵的(3, 0)和(0, 3)位置元素的值即为10。

B. d=1,求45°方向矩阵A的共生矩阵
在这里插入图片描述
则按照45°方向(即45°方向从右上向左下,从左下向右上两个方向),共需统计以下4种情况:统计矩阵值(0,0)(1, 1),(2,2)(3,3)。
具体分析如A同理,最后的GLCM 4 × 4统计矩阵结果如下:
在这里插入图片描述
C. d=1,求90°方向矩阵A的共生矩阵
在这里插入图片描述
计算方法类似上述。
在这里插入图片描述
D. d=1,求135°方向矩阵A的共生矩阵
在这里插入图片描述
计算方法类似上述。
在这里插入图片描述
3. 矩阵的归一化












将矩阵所有元素与矩阵中所有元素之和作除运算,得到概率矩阵。

5. 计算单窗口所有统计方向对应的特征值后平均化

6. 计算整幅图像,重复步骤2-5

一个滑动窗口计算结束后,该窗口就可以移动一个像素点,形成另一个小窗口图像,重复进行上一步的计算,生成新窗口图像的共生矩阵和纹理特征值; 以此类推,滑动窗口遍历完所有的图像像素点后,整个图像就形成了一个由纹理特征值构成的一个纹理特征值矩阵。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225226.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:48
下一篇 2026年3月17日 上午9:48


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号