在“detect_mura_defects_texture.hdev”例程中遇到了灰度共生矩阵,然后研究一下用法。
1.gen_cooc_matrix :什么是灰度共生矩阵,作用是什么
很多文章中都有下面这幅图,这里我也解释下:取图像(N×N)中任意一点 (x,y)及偏离它的另一点 (x+a,y+b),设该点对的灰度值为(g1,g2)。令点(x,y) 在整个画面上移动,则会得到各种 (g1,g2)值,设灰度值的级数为 k,则(g1,g2) 的组合共有 k^2;种。对于整个画面,统计出每一种(g1,g2)值出现的次数,然后排列成一个方阵,在用(g1,g2) 出现的总次数将它们归一化为出现的概率P(g1,g2),这样的方阵称为灰度共生矩阵
看懂了吗?
其实通俗点解释就是:左图中取两个相邻像素算一个单元,那么图片中共有多少个这样的单元呢?
数一数把值存到右图里。然后数字太大不好看,那我做个归一化,就成了概率图,这个概率图就是灰度共生矩阵。
图像的纹理就是这样的重复单元,所以,这个矩阵被用来检测纹理。
2.cooc_feature_matrix:通过灰度共生矩阵获取特征
(1)能量:表示灰度共生矩阵中的元素的平方和。假如左图中所有灰度值都一样,都是同样的灰度单元A,共有16个A,右图中就有一个位置为16,其他为0,能量为16*16;若左图出现一个灰度单元B,此时右图能量为15*15+1*1,能量变小了。所以能量越大,表示灰度变化比较稳定,能量反映了纹理变化的均匀程度。
(2)相关性:表示纹理在行或者列方向的相似程度。相关性越大,相似性越高。
(3)局部均匀性:反映图像局部纹理的变化量。值越大,表示图像局部的变化越小。
(4)反差(对比度):表示矩阵的值的差异程度,也间接表现了图像的局部灰度变化幅度。反差值越大,图像中的纹理深浅越明显,表示图像越清晰;反之,则表示图像越模糊。
如有错误欢迎指正。至于计算公式,去看halcon帮助文档吧。 |