您当前的位置:首页 > 美文摘抄 > 内容

灰度共生矩阵计算(灰度共生矩阵(GLCM)基本原理)

灰度共生矩阵计算(灰度共生矩阵(GLCM)基本原理)

灰度共生矩阵

灰度共生矩阵是图像特征分析和提取的重要方法之一。它在纹理分析、特征分类和图像质量评价方面有着重要的应用。其基本原理如下所示:

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

0度水平方向

40度方向的GLCM

90度垂直GLCM

15度方向GLCM

根据相邻像素间距离参数d的不同,可以得到不同距离的灰度共生矩阵。另外,对于正常的灰度图像,最小灰度值为0,最大灰度值为255,总共有256个灰度级,所以GLCM的大小是256x256,但是我们可以降低灰度级的维数,比如每8个灰度值可以代表一个等级,这样就可以把原来的256x256的共生矩阵改成256/8 * 256 /8=32x32。因此,有三个关键参数最终影响灰度共生矩阵的生成:

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

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

灰度级(最大灰度系数=256 x 56)

灰度共生矩阵实现纹理特征计算

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

活力

熵值

对比

相互关系

逆差

这些纹理特征计算如下:

以上五个是GLCM常见的纹理特征,GLCM一共14个特征值输出,所以我赢了不要在这里重复!有兴趣的可以自行搜索关键词GLCM。

OpenCV计算灰度共生矩阵

OpenCV本身并不没有灰度共生矩阵的算法实现,需要通过对比自己的编码实现来计算图像灰度共生矩阵。代码实现步骤如下:

加载图像,灰度转换

创建灰度共生矩阵Mat对象

计算灰度共生矩阵

显示灰度共生矩阵

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

//0,45,90,135 Matglcm _ 0=Mat:zeros(Size(step,step),CV _ 32fc 1);for(introw=0;rowheightrow){ for(int col=0;colwidthcol ){inti=gray.at(row,col);intj=gray.at(row,col 1);glcm_0.at(i,j);} } Matglcm _ 45=Mat:zeros(Size(step,step),CV _ 32fc 1);for(introw=1;row height-1;row){ for(int col=1;colwidth-1;col ){inti=gray.at(row,col);intj=gray.at(row-1,col 1);glcm_45.at(i,j);} } Matglcm _ 90=Mat:zeros(Size(step,step),CV _ 32fc 1);for(introw=1;row height-1;row){ for(int col=0;colwidthcol ){inti=gray.at(row,col);intj=gray.at(row-1,col);glcm_90.at(i,j);} } Matglcm _ 135=Mat:zeros(Size(step,step),CV _ 32fc 1);for(introw=1;rowheightrow){ for(int col=1;colwidthcol ){inti=gray.at(row,col);intj=gray.at(row-1,col-1);glcm_135.at(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);

运行效果如下:图1

斑马线灰度共生矩阵

提取图像对比度特征

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

int step=256ma image=im read(d:/images/ft texture。jpg );//mati image=im read(D:/images/ban _ texturejpg );马特格雷;颜色(图像,灰色,颜色_ bgr 2灰色);imshow(灰色'灰色);in thigh=gray . rows intwidth=gray . colsmatglcm _ 0=Mat:zeros(Size(width,height),CV _ 32fc 1);直肠ROI。x=0;投资回报率。y=0;投资回报率。宽度=8;投资回报率。高度=8;for(introw=4;行高-4;row){ for(int col=4;colwidth-4;col){ ROI。x=col-4;投资回报率。y=第4行;float PV=calculate _ matrix(gray(ROI));glcm_0.at(row,col)=PV;}}normalize(glcm_0,glcm_0,0,1.0,NORM _ MINMAX);imshow(glcm ,glcm _ 0);等待键(0);

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

Matm=Mat:zeros(Size(8,8),CV _ 32fc 1);for(introw=0;罗维姆。第1行;row){ for(int col=0;科林。cols-1;col ){inti=im.at(row,col)/32;intj=im.at(第一行第一列)/32;m.at(i,j);} }浮动对比度=0;for(inti=0;i8;I){ for(intj=0;j8;j ){contrast=m.at(i,j)*(I-j)*(I-j);} }对比度

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

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

审核彭静

标签:灰度矩阵图像


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 光盘刻录机下载(网上下个系统要光盘刻录机是什么东西)

下一篇: 荣耀note10突然变卡了(华为荣耀10手机突然变成了2g 怎么办)



推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号