点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

灰度共生矩阵

灰度共生矩阵(Gray Level CO-Occurrence Matrix-GLCM)是图像特征分析与提取的重要方法之一,在纹理分析、特征分类、图像质量评价灯方面都有很重要的应用,其基本原理图示如下:

左侧是一个图像,可以看出最小的灰度级别是1,最大的灰度级别是8,共有8个灰度级别。右侧对应的灰度共生矩阵,左上角第一行与第一列的坐标(1, 1)包含值1,原因在于水平方向上,相距一个像素值,当前像素跟水平右侧相邻像素只有一个是1、1相邻的像素值(灰度级别)对;右侧共生矩阵的原始(1, 2) = 2 说明在像素矩阵中有两个像素值1,2相邻的像素点对、以此类推得到完整的右侧灰度共生矩阵。根据当前像素跟相邻像素位置不同,可以计算得到不同的共生矩阵,同时根据像素之间的距离不同会输出不同灰度共生矩阵。总结来说,有如下四种不同角度的灰度共生矩阵:

  • 0度水平方向GLCM

  • 45度方向GLCM

  • 90度垂直方向GLCM

  • 135度方向GLCM

根据相邻像素点之间距离参数D不同可以得到不同距离的GLCM。此外对正常的灰度图像来说,最小灰度值为0,最大的灰度值为255,共计256个灰度级别,所以GLCM的大小为256x256,但是我们可以对灰度级别进行降维操作,比如可以每8个灰度值表示一个level这样,这样原来256x256大小的共生矩阵就可以改成256/8 * 256 /8 = 32x32的共生矩阵。所以最终影响灰度共生矩阵生成有三个关键参数:

  • 角度 (支持0、45、90、135)

  • 距离(大于等于1个像素单位)

  • 灰度级别(最大GLCM=256 x 56)

GLCM实现纹理特征计算

灰度共生矩阵支持如下纹理特征计算,它们是:

  • 能量

  • 熵值

  • 对比度

  • 相关性

  • 逆分差

这些纹理特征计算公式如下:

上述5个是常见的GLCM的纹理特征,GLCM总计由14个特征值输出,这里就不再赘述了!感兴趣的可以自己搜索关键字GLCM。

OpenCV计算灰度共生矩阵

OpenCV本身没有灰度共生矩阵的算法实现,所以需要对照自己编码实现,计算图像灰度共生矩阵,代码实现步骤如下:

  1. 加载图像,灰度转

  2. 创建灰度共生矩阵Mat对象

  3. 计算灰度共生矩阵

  4. 显示灰度共生矩阵

这里我采用的角度为0、45、90、135、像素距离d=1、灰度级别为256,代码实现如下:

// 0°, 45°, 90°, 135°
Mat glcm_0 = Mat::zeros(Size(step, step), CV_32FC1);
for (int row = 0; row < height; row++) {for (int col = 0; col < width; col++) {int i = gray.at<uchar>(row, col);int j = gray.at<uchar>(row, col + 1);glcm_0.at<float>(i, j)++;}
}Mat glcm_45 = Mat::zeros(Size(step, step), CV_32FC1);
for (int row = 1; row < height -1; row++) {for (int col = 1; col < width-1; col++) {int i = gray.at<uchar>(row, col);int j = gray.at<uchar>(row-1, col + 1);glcm_45.at<float>(i, j)++;}
}
Mat glcm_90 = Mat::zeros(Size(step, step), CV_32FC1);
for (int row = 1; row < height-1; row++) {for (int col = 0; col < width; col++) {int i = gray.at<uchar>(row, col);int j = gray.at<uchar>(row-1, col);glcm_90.at<float>(i, j)++;}
}
Mat glcm_135 = Mat::zeros(Size(step, step), CV_32FC1);
for (int row = 1; row < height; row++) {for (int col = 1; col < width; col++) {int i = gray.at<uchar>(row, col);int j = gray.at<uchar>(row-1, col - 1);glcm_135.at<float>(i, j)++;}
}normalize(glcm_0, glcm_0, 0, 1.0, NORM_MINMAX);
normalize(glcm_45, glcm_45, 0, 1.0, NORM_MINMAX);
normalize(glcm_90, glcm_90, 0, 1.0, NORM_MINMAX);
normalize(glcm_135, glcm_135, 0, 1.0, NORM_MINMAX);

运行效果如下:图一

斑马线的灰度共生矩阵

提取图像对比度特征

基于共生矩阵实现纹理特征计算,这里我用了比较简单的对比度计算来实现局部纹理特征提取、代码实现如下(局部窗口大小8x8、灰度级别256/32 =8个级别)

int step = 256;
Mat image = imread("D:/images/ftexture.jpg");
// Mat image = imread("D:/images/ban_texture.jpg");
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
imshow("gray", gray);
int height = gray.rows;
int width = gray.cols;Mat glcm_0 = Mat::zeros(Size(width, height), CV_32FC1);
Rect roi;
roi.x = 0;
roi.y = 0;
roi.width = 8;
roi.height = 8;for (int row = 4; row < height-4; row++) {for (int col = 4; col < width-4; col++) {roi.x = col-4;roi.y = row - 4;float pv = calculate_matrix(gray(roi));glcm_0.at<float>(row, col) = pv;}
}
normalize(glcm_0, glcm_0, 0, 1.0, NORM_MINMAX);
imshow("glcm", glcm_0);
waitKey(0);

方法计算灰度矩阵的代码如下:

Mat m = Mat::zeros(Size(8, 8), CV_32FC1);
for (int row = 0; row < im.rows-1; row++) {for (int col = 0; col < im.cols-1; col++) {int i = im.at<uchar>(row, col) / 32;int j = im.at<uchar>(row+1, col+1) / 32;m.at<float>(i, j)++;}
}
float contrast = 0;
for (int i = 0; i < 8; i++) {for (int j = 0; j < 8; j++) {contrast += m.at<float>(i, j)*(i - j)*(i - j);}
}
return contrast;

计算135°的灰度共生矩阵,基于计算局部对比度提取纹理运行结果如下:

测试一(左侧是输入图像、右侧135的对比度)

测试二

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

基于灰度共生矩阵(GLCM)的图像纹理分析与提取相关推荐

  1. matlab 灰度共生矩阵熵,图像的灰度共生矩阵GLCM(matlab 函数帮助).

    Gray-level co-occurrence matrix from an image 图像的灰度共生矩阵 灰度共生矩阵是像素距离和角度的矩阵函数,它穿越计算图像中定然距离和定然方向的两点灰度之间 ...

  2. bp 神经网络 优点 不足_【学术论文】基于灰度共生矩阵和BP神经网络的乳腺肿瘤识别...

    摘要 乳腺肿瘤是女性病发率极高的一种肿瘤疾病, 但也是一种可以通过早期确诊.提早治疗来降低病死率的一种疾病.提出灰度共生矩阵结合BP神经网络的方法, 提高乳腺肿瘤的识别率.首先将红外乳腺图像进行预处理 ...

  3. 灰度共生矩阵(GLCM)

    灰度共生矩阵(GLCM) 算法简介 灰度共生矩阵法(GLCM, Gray - level co - occurrence matrix),就是通过计算灰度图像得到它的共生矩阵,然后透过计算该共生矩阵得 ...

  4. 灰度共生矩阵GLCM及其matlab实现

    Prerequisites 概念 计算方式 对于精度要求高且纹理细密的纹理分布,我们取像素间距为d=1d = 1,以下是方向的说明: 我们来看,matlab内置工具箱中的灰度共生矩阵的生成函数gray ...

  5. 计算灰度共生矩阵GLCM

    灰度共生矩阵 灰度共生矩阵定义为像素对的联合分布概率,是一个对称矩阵,它不仅反映图像灰度在相邻的方向.相邻间隔.变化幅度的综合信息,但也反映了相同的灰度级像素之间的位置分布特征,是计算纹理特征的基础. ...

  6. [Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽运算

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  7. 基于灰度质心法和骨架的激光中心线提取

    之前博主一直在做线结构光成像,硬件比较垃圾,相机加镜头和线激光器总共成本在1000以内,精度在0.1mm左右,感觉这种成本做出来还是不错的,其实主要大部分时间花在了分析上来达到最好的效果. 一般对于激 ...

  8. 灰度共生矩阵特征提取步骤_灰度共生矩阵纹理特征提取的Matlab实现

    灰度共生矩阵纹理特征提取的 Matlab 实现 焦蓬蓬 ; 郭依正 ; 刘丽娟 ; 卫星 [期刊名称] <计算机技术与发展> [年 ( 卷 ), 期] 2012(000)011 [摘要] ...

  9. 【图像算法】图像特征:GLCM灰度共生矩阵纹理特征

    [图像算法]图像特征:GLCM SkySeraph Aug 27th 2011  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modifie ...

最新文章

  1. codeforces364D
  2. 量子纠缠buff加持,雷达精度提高500倍,论文已登物理顶刊
  3. LTE之MIMO学习1-TB/codeword/layer/precoding/port
  4. 自定义LeNet5,开启你的炼丹之路
  5. activemq网络桥接_ActiveMQ –经纪人网络解释–第4部分
  6. cwinthread*线程指针怎么销毁结束_最新版Web服务器项目详解 01 线程同步机制封装类...
  7. SpringBoot2 整合Nacos组件,环境搭建和入门案例详解
  8. 一行 Python 代码能干什么?有意思!
  9. 神奇的数字之回文数c语言,奇妙的数字
  10. VB6 用ODBC连接数据库
  11. android 样式 下载,VolumeStyles软件下载官方
  12. mysql批量导出导入数据
  13. stony大学计算机科学找工作,如果我本科四年在加州大学洛杉矶分校安德森商学院就读,毕业后我实在当地找工作好还是回国比较好?哪个待...
  14. 【verbs】ibv_query_port()
  15. java操作word文档(文字,图片,表格添加以及替换操作)
  16. Google是如何做Code Review的
  17. windows垃圾清理脚本
  18. NX二次开发-UFUN工程图导入视图UF_DRAW_import_view
  19. 华为HGU改成SFU的方法
  20. 一个基于ThinkPHP的政府文件自动套红插件

热门文章

  1. 芬兰开放“线上AI速成班”课程,全球网民均可免费观看
  2. 王贻芳院士:为什么中国要探究中微子实验?
  3. 率清华团队研发“天机芯”登《Nature》封面,他说类脑计算是发展人工通用智能的基石...
  4. 激光雷达,马斯克看不上,却又无可替代?
  5. 无监督机器学习中,最常见4类聚类算法总结 | 技术头条
  6. iPad mini时隔四年更新,搭载A12芯片,起售价2999
  7. 只讲技术,拒绝空谈!2018 AI开发者大会精彩议程曝光
  8. 喜大普奔!TensorFlow终于支持A卡了
  9. 免费报名 | 机器学习的第二次入门(入群有福利)
  10. Linux 打包及压缩命令使用方法总结