灰度梯度共生矩阵C++实现

灰度-梯度共生矩阵的元素H(i,j)定义为在归一化的灰度图像F(m,n)和归一化的梯度图像G(m,n)中共同具有灰度为i和梯度为j的像素点数。例如H(10,5)=45,表示图像内像素点灰度为10,梯度为5的像素点个数是45。

1.灰度归一化

F(K,L)=INT(f(K,L)\times N_{H} /f_{M} )+1

其中N_{H}是归一化后的最大灰度级,取16;f_{M}是原图像中最大的灰度值。

2.梯度归一化

首先采用下面的公式计算各点的梯度值。

g(K,L)=\sqrt{g_{x} ^{2} +g_{y} ^{2}}

g_{x}=f(K+1,L-1)+2f(K+1,L)+f(K+1,L+1)-f(K-1,L-1)-2f(K-1,L)-f(K-1,L+1)

g_{y}=f(K-1,L+1)+2f(K,L+1)+f(K+1,L+1)-f(K-1,L+1)-2f(K,L-1)-f(K+1,L-1)

然后梯度归一化

G(K,L)=INT(g(K,L)\times N_{g} /g_{M})+1

其中INT表示取整运算;N_{g}是归一化后的最大梯度值,取16;g_{M}是图像中最大的梯度值。

3.统计梯度-灰度共生矩阵

在归一化的灰度图像F(m,n)和归一化的梯度图像G(m,n)中统计同时使F(m,n)=iG(m,n)=j的像素点对数,此值即为共生矩阵H的第(i,j)个元素的值。

P(i,j)=H(i,j)/\sum_{i=1}^{N_{H}}\sum_{j=1}^{N_{W}}H(i,j)

4.纹理参数的计算

公式是从论文中截图出来的,自己写实在太慢了。

灰度梯度共生矩阵C++实现_第1张图片

参考代码见下面这个链接,代码使用C++和opencv实现。

https://gitee.com/lihao-20200423/lihao-code/tree/master/GGCM

实现代码的时候参考的博客。

https://blog.csdn.net/qq_37059483/article/details/78292869

你可能感兴趣的:(c++)