首页 > 其他分享 >特征提取——纹理特征

特征提取——纹理特征

时间:2023-06-05 20:32:07浏览次数:28  
标签:src srcdata 特征 ++ 纹理 int 灰度 特征提取 ptr

特征提取——纹理特征

LBP图像特征

图像处理之特征提取(二)之LBP特征简单梳理<br> https://blog.csdn.net/coming_is_winter/article/details/72859957<br> https://blog.csdn.net/zouxy09/article/details/7929531<br> LBP特征理解。<br> http://blog.csdn.net/hqh45/article/details/24501097 LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikäinen, 和 D. Harwood 在1994年提出,用于纹理特征提取。而且,提取的特征是图像的局部的纹理特征;

lbp理论:
原始的LBP算子定义为在3*3的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理信息。

圆形LBP算子: 半径为R

基本的 LBP算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala等对 LBP 算子进行了改进,将 3×3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的 LBP 算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子;

即不断旋转圆形邻域得到一系列初始定义的 LBP值,取其最小值作为该邻域的 LBP 值。

灰度共生矩阵(GLCM,Gray-Level Co-occurrence Matrix)

概念:

灰度共生矩阵是涉及像素距离和角度的矩阵函数,它通过计算图像中一定距离和一定方向的两点灰度之间的相关性,来反映图像在<font color=red>方向、间隔、变化幅度及快慢</font>上的综合信息。<br> 灰度直方图是对图像上单个像素具有某个灰度进行统计的结果,而<font color=red>灰度共生矩阵是对图像上保持某距离的两像素分别具有某灰度的状况进行统计得到的。</font>

含义: 以(1,1)点为例,GLCM(1,1)值为1说明左侧原图只有一对灰度为1的像素水平相邻。GLCM(1,2)值为2,是因为原图有两对灰度为1和2的像素水平相邻。

矩阵
|1 2 1|
|2 2 2| 
|1 2 2|
对应GLMC矩阵(最大是2,所以是2*2矩阵)

GLCM矩阵:
  1 2
1|0 2| 
2|1 6|
0(1,1)相邻, 2(1,2)水平相邻, 2(2,1)垂直相邻, 6(2,2)相邻

灰度共生矩阵的特征

  1. 角二阶矩(Angular Second Moment, ASM)<br> 公式:$ASM = sum(p(i,j)^2)$,其中 $p(i,j) $表示归一后的灰度共生矩阵 意义:角二阶矩是图像灰度分布均匀程度和纹理粗细的一个度量,当图像纹理绞细致、灰度分布均匀时,能量值较大,反之,较小。<br> <font color=red>结论:值大,灰度分布均匀</font>

  2. 熵(Entropy, ENT)<br> 公式:$ENT=sum[-p(i,j)log(p(i,j))] $ 意义:描述图像具有的信息量的度量,表明图像的复杂程度,当复杂程度高时,熵值较大,反之则较小。<br> <font color=red>结论:值大,复杂程度高</font>

  3. 反差分矩阵(Inverse Differential Moment, IDM) 公式:$IDM=sum[p(i,j)/(1+(i-j)^2)]$ 意义:反映了纹理的清晰程度和规则程度,纹理清晰、规律性较强、易于描述的,值较大;杂乱无章的,难于描述的,值较小。 <font color=red>结论:值大,纹理清晰、规律性较强</font>

Gabor小波

Gabor函数是一个用于边缘提取的线性滤波器

作用: Gabor小波可以方便的提取图像在<font color=red>各个尺度和方向上的纹理信息</font>,同时在一定程度上降低了图像中光照变化和噪声的影响。<br>提取目标的<font color=red>局部空间和频率域信息</font>方面具有良好的特性。<br> 特点: 1、Gabor小波对于图像的边缘敏感 2、对光照不敏感 3、对图像旋转有一定适应性

灰度共生矩阵opencv代码:
// 0°灰度共生矩阵
void getGLCM0(Mat& src, Mat& dst, int gray_level)// 0度灰度共生矩阵
{
    CV_Assert(1 == src.channels());

    int height = src.rows;
    int width = src.cols;

    dst.create(gray_level, gray_level, CV_32SC1);
    dst = Scalar::all(0);

    for (int i = 0; i < height; i++)
    {
        int*srcdata = src.ptr<int>(i);
        for (int j = 0; j < width - 1; j++)
        {
            // 同样的像素对,水平相邻
            int rows = srcdata[j];
            int cols = srcdata[j + 1];
            dst.ptr<int>(rows)[cols]++;
        }
    }

}

// 90°灰度共生矩阵
void getGLCM90(Mat& src, Mat& dst, int gray_level)
{
    CV_Assert(1 == src.channels());

    int height = src.rows;
    int width = src.cols;

    dst = Mat(gray_level, gray_level, CV_32SC1, Scalar(0));

    for (int i = 0; i < height - 1; i++)
    {
        int*srcdata = src.ptr<int>(i);
        int*srcdata1 = src.ptr<int>(i + 1);
        for (int j = 0; j < width; j++)
        {
            // 同样的像素对,垂直相邻
            int rows = srcdata[j];
            int cols = srcdata1[j];
            dst.ptr<int>(rows)[cols]++;
        }
    }
}

// 45°灰度共生矩阵
void getGLCM45(Mat& src, Mat& dst, int gray_level)
{
    CV_Assert(1 == src.channels());

    int height = src.rows;
    int width = src.cols;

    dst = Mat(gray_level, gray_level, CV_32SC1, Scalar(0));

    for (int i = 0; i < height - 1; i++)
    {
        int*srcdata = src.ptr<int>(i);
        int*srcdata1 = src.ptr<int>(i + 1);
        for (int j = 0; j < width - 1; j++)
        {
            // 同样的像素对,45°相邻
            int rows = srcdata[j];
            int cols = srcdata1[j + 1];
            dst.ptr<int>(rows)[cols]++;
        }
    }
}

// 135°灰度共生矩阵
void getGLCM135(Mat& src, Mat& dst, int gray_level)
{
    CV_Assert(1 == src.channels());

    int height = src.rows;
    int width = src.cols;

    dst = Mat(gray_level, gray_level, CV_32SC1, Scalar(0));

    for (int i = 0; i < height - 1; i++)
    {
        int*srcdata = src.ptr<int>(i);
        int*srcdata1 = src.ptr<int>(i + 1);
        for (int j = 1; j < width; j++)
        {
            // 同样的像素对,135°相邻
            int rows = srcdata[j];
            int cols = srcdata1[j - 1];
            dst.ptr<int>(rows)[cols]++;
        }
    }

}

// 计算特征值
void featureGLCM(Mat&src, double& Asm, double& Ent, double& Con, double& Idm)
{

    CV_Assert(src.channels() == 1);

    int height = src.rows;
    int width = src.cols;
    int total = 0;

    //求图像所有像素的灰度值的和
    for (int i = 0; i < height; i++)
    {
        int*srcdata = src.ptr<int>(i);
        for (int j = 0; j < width; j++)
        {
            total += srcdata[j];
        }
    }

    //图像每一个像素的的值除以像素总和
    Mat mean;
    mean.create(height, width, CV_64FC1);
    for (int i = 0; i < height; i++)
    {
        int*srcdata = src.ptr<int>(i);
        double*copydata = mean.ptr<double>(i);
        for (int j = 0; j < width; j++)
        {
            copydata[j] = (double)srcdata[j] / (double)total;
        }
    }

    for (int i = 0; i < height; i++)
    {
        double*srcdata = mean.ptr<double>(i);
        for (int j = 0; j < width; j++)
        {
            // 能量
            Asm += srcdata[j] * srcdata[j];

            // 熵(Entropy) 
            if (srcdata[j]>0)
                Ent -= srcdata[j] * log(srcdata[j]);

            // 对比度
            Con += (double)(i - j)*(double)(i - j)*srcdata[j];

            // 逆差矩
            Idm += srcdata[j] / (1 + (double)(i - j)*(double)(i - j));
        }
    }
}

标签:src,srcdata,特征,++,纹理,int,灰度,特征提取,ptr
From: https://blog.51cto.com/u_16066155/6419021

相关文章

  • User-Agent特征库
    User-Agent特征库爬行特征库(CRAWLERS)008ABACHOBotAccoona-AI-AgentAddSugarSpiderBotAnyApexBotArachmoB-l-i-t-z-B-O-TBaiduspiderBecomeBotBeslistBotBillyBobBotBimbotBingbotBlitzBOTboitho.com-dcboitho.com-robotbtbotCatchBotCerberianDrtrsCharlott......
  • 国考平面图形推理高频考点(结合近五年常考规律和图形特征总结)
    理清楚平面图形的推理,争取在发卷审题后就全部秒杀!一定要培养出对该类题型极度敏感的感觉!总结如下:1、对称性题型特征:黑白格、规则图形拼合,三角、T型等箭头指向性明显①拼接在一起(并非重合)②③黑白格④2、一笔画题型识别很重要:【束手无策就想一笔画】①②③......
  • 编解码、加解密常见特征
    编码编码:Base系列、Unicode、Escape、URL、Hex;https://book.hacktricks.xyz/crypto-and-stego/crypto-ctfs-tricksbase系列Base64是我们最常见的编码,除此之外,其实还有Base16、Base32、Base58、Base85、Base100等,他们之间最明显的区别就是使用了不同数量的可打印字符对任意......
  • 通过实例了解vue3.3更新的特征
    开场白5月份,vue团队发布了vue3.3.这次小版本的发布主要解决了--Vue与TypeScript一起使用时的许多长期存在的痛点.下面我们一起来学习一下vue3.3新特征准备新新特征的环境根据官方团队的描述,我们需要准备一下工作。vue升级到3.3时,建议同时更新以下依赖项:Volar/vue......
  • 特征检测
    特征点/区域局部特征点的要求可重复性和正确性:平面内几何变换不变,平面外几何变化不变,光照鲁邦。局部性:特征是局部的,对遮挡物不敏感。数量:要有足够多的特征点/区域来覆盖整个物体特异性:区域需包含“感兴趣的”结构有效性:接近实时特征响应在任何方向移动窗口,灰度值有较大的......
  • m基于HOG特征提取和GRNN网络的人体姿态识别算法matlab仿真,样本为TOF数据库的RGB-D深
    1.算法仿真效果matlab2022a仿真结果如下:TOF数据库如下:2.算法涉及理论知识概要1、HOG特征:方向梯度直方图(HistogramofOrientedGradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。......
  • m基于HOG特征提取和GRNN网络的人体姿态识别算法matlab仿真,样本为TOF数据库的RGB-D深
    1.算法仿真效果matlab2022a仿真结果如下:  TOF数据库如下:      2.算法涉及理论知识概要1、HOG特征:        方向梯度直方图(HistogramofOrientedGradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统......
  • 论文解读 | 基于改进点对特征的点云6D姿态估计
    原创|文BFT机器人01 摘要点对特征(PPF)方法已被证明是一种有效的杂波和遮挡下的姿态估计方法。文章的改进方法主要包括:(1)一种基于奇偶规则求解封闭几何的法向的方法;(2)通过将体素网格划分为等效角度单元的有效降采样方法;(3)基于拟合点的验证步骤。在真实杂波数据集上对该方......
  • 特征选择的3种方法
    当数据维数比较大时,就需要进行降维,特征选择是降维的一种主要方式,又包括3种方法:Filter、Wrapper和Enbedding。1.Filter过滤器方法,这种方法首先选定特征,再来进行学习。根据每一个属性的一些指标(如方差等),来确定这个属性的重要程度,然后对所有属性按照重要程度排序,从高到低的选择属性。......
  • 推荐系统中常用的特征选择方法
    背景推荐系统已经迈入了深度学习时代,模型结构比较复杂,下面介绍在深度学习背景下常用的特征选择方法 1.根据特征在正负样本上分布的差异直观感觉上一个特征越重要,那么它在正负样本的分布差异应该是越大的,基于此我们可以用KL散度来表示特征重要性,但是KL散度是非对称,我们可以采......