图像的纹理特性之灰度共生矩阵的graycomatrix函数及其matlab实现

本文主要是介绍图像的纹理特性之灰度共生矩阵的graycomatrix函数及其matlab实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图像的灰度共生矩阵(Gray-level co-occurrence matrix from an image)

灰度共生矩阵是像素距离和角度的矩阵函数,它通过计算图像中一定距离和一定方向的两点灰度之间的相关性,来反映图像在方向、间隔、变化幅度及快慢上的综合信息。
graycomatrix

matlab(r2013b)里如下解释和使用

语法
glcm = graycomatrix(I)
glcms = graycomatrix(I, param1, val1,param2, val2,...)
[glcm, SI] = graycomatrix(...)

描述
glcm = graycomatrix(I):创建图形I的灰度共生矩阵glcm。graycomatrix通过计算灰度值(灰度强度)i与水平相邻的灰度值为j的相邻频率,来得到GLCM。(也可以使用'Offsets'参数,指定像素的空间临接关系)。GLCM里的元素(i,j)代表代表灰度i与灰度j在图像中水平相邻的次数。
graycomatrix从图像的scaled version中得到GLCM。默认的,如果是一个二进制图像,graycomatrix将这个图像转换到两个灰度级(two grey-levels)。如果I是一个强度图像,graycomatrix将该图像转换到8个灰度级。使用NumLevels 参数可以指定graycomatrix转换后的灰度级别,使用'GrayLimits' 参数可以指定转化的方式。
下图显示了在4*5的图像中,graycomatrix如何计算GLCM里的一些值。


图1
glcms = graycomatrix(I,param1,val1,param2,val2,...)返回一个或多个灰度共生矩阵,具体取决于可选参数/值。 参数名称可以缩写,大小写也不重要。

参数
按字母表顺序列出如下参数
'GrayLimits' 描述: 一个二元素向量[low high],用于指定I中的值如何缩放到gray级别。 如果N是用于缩放的灰度级数(参见参数'NumLevels'),范围[low high]被划分为N个相等的宽度bins,并且bin中的值被映射到一个灰度级别。 小于等于low的灰度值的缩放为1.将大于等于high的灰度值缩放为“NumLevels”。如果“GrayLimits”设置为[],则将I中的灰度级最小和最大灰度值设置为low和high,[min{I(:)} max{I(:)}] 默认 如 double[0 1] int16 [-32768 32767],不写该参数时, 默认为[0,1]
理解:具体过程是这样的,是从图像I缩放到si,然后根据si来得到glcm(图1)。

matlab示例如下
i =
1.0000 1.5000 2.0000
2.5000 3.0000 3.5000
4.0000 4.5000 5.0000
>> [glcms,si] = graycomatrix(i,'graylimits',[1,4])
glcms =
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 2
si =
1 2 3
5 6 7
8 8 8
理解:由i 根据'graylimits',[1,4] 将i映射为灰度级别默认为1-8的si 小于等于1映射为1,大于等于4映射为8,1-4之间再划分六个等级带对应至2 3 4 5 6 7,
接着按默认水平邻接的方法,将像素值水平邻接的次数放至矩阵glcm中

'NumLevels' 描述:指定了在I中缩放灰度值时要使用的灰度级数的整数。例如,如果NumLevels为8(默认为8),则graycomatrix将I中的值缩放为1到8之间的整数。灰度级数决定了 灰度共生矩阵(glcm)的大小。
matlab示例如下
>> i=[-0.1 0.5;1 2]
i =
-0.1000 0.5000
1.0000 2.0000
>> [glcms,si] = graycomatrix(i,'numlevels',3)
glcms =
0 1 0
0 0 0
0 0 1
si =
1 2
3 3
理解:未写graylimits 默认为[0,1],所以大于等于1的为2,小于等于0为1,0-1为2,glcm为3*3矩阵

'Offset' 描述:p*2整数数组,指定感兴趣像素与其邻像素之间的距离。 数组中的每一行都是一个两元素向量[row_offset,col_offset],用于指定像素的关系或偏移量。 row_offset是感兴趣像素与其邻居之间的行数。 col_offset是感兴趣像素与其邻居之间的列数。由于偏移量通常表示为一个角度,下表列出了指定公共角度的偏移值,与定像素距离D(理解:[0,D]为0度:0代表行距为0,即同一行,d代表列相距为d,为正数在右边,所以为0度)。 默认为[0,1]

>> i=[-0.1 0.5 1;1 2 3]
i =
-0.1000 0.5000 1.0000
1.0000 2.0000 3.0000
>> [glcms,si] = graycomatrix(i,'numlevels',3,'offset',[0 2])
glcms =
0 0 1
0 0 0
0 0 1
si =
1 2 3
3 3 3
理解,offset',[0 2],所以,glcm坐标为【1,2】处没有值。【1.3】【3,3】处有值
'Symmetric' 描述:布尔值创建一个GLCM,其中不考虑像素对中的值的排序。 例如,当“symmetric”设置为true时,当计算值1与值2相邻的次数时,灰度矩阵将计算1,2和2,1两个配对。当“symmetric”为“false”时,灰度矩阵仅计数1,2 或2,1,取决于“offset”的值。 默认为false
[glcm, SI] = graycomatrix(...) 返回用于计算灰度生成矩阵glsm的缩放图像SI。 SI中的值介于1和NumLevel之间。
Class Support
I可以是数字或逻辑矩阵,但必须是二维,实数和非稀疏的。 SI是具有与I相同大小的double型矩阵。glcms是'NumLevels'*'NumLevels'*P的double型阵列,其中P是'offset'中的偏移数。
notes

灰度共生矩阵的另一个名称是灰度空间依赖矩阵(gray-level spatial dependence matrixgray-level spatial dependence matrix)。 此外,文献中常常使用cooccurrence,而没有连字符。
如果像素包含NaN,则灰度矩阵忽略该像素对儿。
graycomatrix替换正值Infs为NumLevels值,并取代负值Infs为值1。
如果相应的相邻像素落在图像边界之外,则灰度矩阵忽略边界像素。
当“Symmetric”设置为true时,创建的GLCM在其对角线上是对称的,并且相当于Haralick(1973)描述的GLCM。 GLCM通过以下语法生成,“Symmetric”设置为true
灰度矩阵(I,'offset',[0 1],'Symmetric',true)
相当于以下声明产生的两个GLCM的总和,其中“Symmetric”被设置为false。
graycomatrix(I,'offset',[0 1],'Symmetric',false)
graycomatrix(I,'offset',[0 -1],'Symmetric',false)Examples

例子
1、
I = imread('circuit.tif');
glcm = graycomatrix(I,'Offset',[2 0]);
2、
I = [ 1 1 5 6 8 8; 2 3 5 7 0 2; 0 2 3 5 6 7];
[glcm,SI] = graycomatrix(I,'NumLevels',9,'G',[])




这篇关于图像的纹理特性之灰度共生矩阵的graycomatrix函数及其matlab实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/301188

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

PyQt6/PySide6中QTableView类的实现

《PyQt6/PySide6中QTableView类的实现》本文主要介绍了PyQt6/PySide6中QTableView类的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录1. 基本概念2. 创建 QTableView 实例3. QTableView 的常用属性和方法

PyQt6/PySide6中QTreeView类的实现

《PyQt6/PySide6中QTreeView类的实现》QTreeView是PyQt6或PySide6库中用于显示分层数据的控件,本文主要介绍了PyQt6/PySide6中QTreeView类的实现... 目录1. 基本概念2. 创建 QTreeView 实例3. QTreeView 的常用属性和方法属性

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数