图像的纹理特性之灰度共生矩阵的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

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +