灰度共生矩阵&灰度梯度共生矩阵

学习记录,不当之处多多指教,在此感谢以下博主

1,灰度共生矩阵(Gray Level Cooccurrence Matrix)

1.0感谢

灰度共生矩阵的原理及实现(特征提取)-OpenCV
灰度共生矩阵的生成和理解
灰度共生矩阵原理

1.1初识

在这里插入图片描述
以水平相邻为例:
GLCM(1,1)=1表示I图中左右相邻都为1的只有一对
GLCM(1,2)=2表示I图中左右分别为1,2的有两对,如上图的红线所示

通常我们假设有两个点f(x,y)与f(x+a,y+b)相邻:x方向相隔a,y方向相隔b
a=1,b=0:水平相邻,0度
a=1,b=1:对角相邻,45度
a=-1,b=1:对角相邻,135度

1,灰度共生矩阵定义为:从灰度为i的像素点出发,统计保持一定距离的两具有某灰度分布的像素。统计"灰度对"同时发生的概率,形成了灰度共生矩阵。
2,共生矩阵用两个位置的像素的联合概率密度来定义,它不仅反应亮度的分布特征,也反映具有相同亮度或者接近亮度像素之间的位置分布特性,是有关图像亮度变换的二阶统计特征。
3,一般不直接作为区分纹理特征(数据量大),一般采用如下统计量:能量,熵,对比度,均匀性,相关性,方差,和平均,和方差,和熵,差方差,差平均,差熵,相关信息测度,最大相关系数。

能量:角二阶矩阵(Angular Second Moment,ASM),Energy,uniformity,uniformity of energy
公式: ASM=sum(p(i,j).^2)
 p(i,j)是归一化的灰度共生矩阵。反应了图像灰度分布均匀程度和纹理粗细度,图像均匀,纹理较细,反应在共生矩阵就是大量集中在某一部分,因此ASM值大。

熵:(Entropy,ENT)
公式: ENT = sum(p(i,j)*(-log(p(i,j))))
 p(i,j)是归一化的灰度共生矩阵。描述图像具有的信息量的度量,表明图像的复杂度,和复杂度成正比。

反差分矩阵:(Inverse Differential Moment,IDM)
公式: IDM = sum(p(i,j)/(1+(i-j)^2))
 反应了纹理的清晰程度和规则程度,纹理清晰,规律性强,易于描述,值较大,反之较小。

对比度:(Contrast)
公式: contrast= sum(p(i,j)*(i-j)^2)
 返回图像中某个像素与它的邻居之间的对比度。反映了图像的清晰度和纹理沟纹深浅的程度

1.2Opencv实现

代码源自: 传送门

GLCM.h

#include<iostream>
#include <cassert>
#include <vector>
#include <iterator>
#include <functional>
#include <algorithm>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

typedef vector<vector<int> > VecGLCM;

typedef struct _GLCMFeatures
{
   
    _GLCMFeatures()
        : energy(0.0)
        , entropy(0.0)
        , contrast(0.0)
        , idMoment(0.0)
    {
   

    }

    double energy;      // 能量ASM:angular second moment  
    double entropy;     // 熵
    double contrast;    // 对比度
    double idMoment;    // 逆差分矩, inverse difference moment

} GLCMFeatures;

class GLCM
{
   
public:
    GLCM();
    ~GLCM();

public:
    // 枚举灰度共生矩阵的方向
    enum 
    {
   
        GLCM_HORIZATION = 0,        // 水平
        GLCM_VERTICAL = 1,          // 垂直
        GLCM_ANGLE45 = 2,           // 45度角
        GLCM_ANGLE135 = 3           // 135度角
    };

public:
    // 计算灰度共生矩阵
    void calGLCM(IplImage* inputImg, VecGLCM& vecGLCM, int angle);
    // 计算特征值
    void getGLCMFeatures(VecGLCM& vecGLCM, GLCMFeatures& features);
public:
    // 初始化灰度共生矩阵
    void initGLCM(VecGLCM& vecGLCM, int size = 16);
    // 设置灰度划分等级,默认值为 16
    void setGrayLevel(int grayLevel) {
    m_grayLevel = grayLevel; }
    // 获取灰度等级
    int getGrayLevel() const {
    return m_grayLevel; }
private:
    
	// 计算水平灰度共生矩阵
    void getHorisonGLCM(VecGLCM &src, VecGLCM &dst, int imgWidth, int imgHeight);
    // 计算垂直灰度共生矩阵
    void getVertialGLCM(VecGLCM &src, VecGLCM &dst, int imgWidth, int imgHeight);
    // 计算 45 度灰度共生矩阵
    void getGLCM45(VecGLCM &src, VecGLCM &dst, int imgWidth, int imgHeight);
    // 计算 135 度灰度共生矩阵
    void getGLCM135(VecGLCM &src, VecGLCM &dst, int imgWidth, int imgHeight);

private:
    int m_grayLevel;        // 将灰度共生矩阵划分为 grayLevel 个等级

};

GLCM.cpp

#include "stdafx.h"
#include "GLCM.h"

GLCM::GLCM
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
灰度梯度共生矩阵是一种图像特征提取方法,它将图像的灰度梯度(或边缘)信息结合起来进行分析。与灰度共生矩阵只使用灰度信息相比,灰度梯度共生矩阵利用了图像的灰度梯度信息,从而得到更为全面的特征描述。 在灰度梯度共生矩阵中,首先选择一个像素点及其偏移点作为一个点对,然后计算点对的灰度值。假设图像的最大灰度级为L,则点对的灰度值可以构成L*L种组合。接着统计每种组合在整幅图像中出现的次数,并根据出现的总次数对它们进行归一化,得到灰度梯度共生矩阵灰度梯度共生矩阵能够反映图像中像点的灰度梯度(或边缘)之间的相互关系。图像的灰度是构成图像的基础,而梯度则是构成图像边缘轮廓的重要要素。通过分析灰度梯度共生矩阵,我们可以获取到图像的主要信息,特别是图像的边缘轮廓信息。 综上所述,灰度梯度共生矩阵是一种利用图像的灰度梯度信息进行特征提取的方法,通过分析灰度梯度共生矩阵可以获取到图像的边缘轮廓等重要信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [灰度共生矩阵&灰度梯度共生矩阵](https://blog.csdn.net/weixin_43897604/article/details/102875745)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值