基于Python探究灰度共生矩阵(GLCM)那点事儿 - 知乎一、什么是灰度共生矩阵? 灰度共生矩阵(Gray-level co-occurrence matrix;GLCM)和相关的纹理特征计算是图像的一种分析技术。给定一个图像,该图像由各自具有一定强度(特定灰度级)的像素组成,GLCM矩阵在图像…https://zhuanlan.zhihu.com/p/367213524

灰度共生矩阵、纹理特征具体定义及计算方法:HARALICK R M,SHANMUGAM K,DINSTEIN I H.Textural Features for Image Classification[J]. IEEE Transactionson Systems,Man,and Cybernetics,1973,SMC-3(6):610-621.

原始代码(下文仅对原始代码稍许改动,文中共14种纹理,此处仅计算9种)
https://github.com/tzm030329/GLCM/blob/master/fast_glcm.pyhttps://github.com/tzm030329/GLCM/blob/master/fast_glcm.py

灰度共生矩阵

灰度共生矩阵(GLCM, Gray-level co-occurrence matrix),就是通过计算灰度图像得到它的共生矩阵,然后透过计算该共生矩阵得到矩阵的部分特征值,来分别代表图像的某些纹理特征(纹理的定义仍是难点)。灰度共生矩阵能反映图像灰度关于方向、相邻间隔、变化幅度等综合信息,它是分析图像的局部模式和它们排列规则的基础。

import numpy as np
import cv2"""计算灰度共生矩阵"""
def fast_glcm(img, vmin=0, vmax=255, levels=8, kernel_size=5, distance=1.0, angle=0.0):'''Parameters----------img: array_like, shape=(h,w), dtype=np.uint8input imagevmin: intminimum value of input imagevmax: intmaximum value of input imagelevels: intnumber of grey-levels of GLCMkernel_size: intPatch size to calculate GLCM around the target pixeldistance: floatpixel pair distance offsets [pixel] (1.0, 2.0, and etc.)angle: floatpixel pair angles [degree] (0.0, 30.0, 45.0, 90.0, and etc.)Returns-------Grey-level co-occurrence matrix for each pixelsshape = (levels, levels, h, w)'''# digitizebins = np.linspace(vmin, vmax+1, levels+1)gl1 = np.digitize(img, bins) - 1# make shifted imagedx = distance*np.cos(np.deg2rad(angle))dy = distance*np.sin(np.deg2rad(-angle))mat = np.array([[1.0,0.0,-dx], [0.0,1.0,-dy]], dtype=np.float32)h,w = img.shapegl2 = cv2.warpAffine(gl1, mat, (w,h), flags=cv2.INTER_NEAREST,borderMode=cv2.BORDER_REPLICATE)# make glcmglcm = np.zeros((levels, levels, h, w), dtype=np.uint8)for i in range(levels):for j in range(levels):mask = ((gl1==i) & (gl2==j))glcm[i,j, mask] = 1kernel = np.ones((kernel_size, kernel_size), dtype=np.uint8)for i in range(levels):for j in range(levels):glcm[i,j] = cv2.filter2D(glcm[i,j], -1, kernel)glcm = glcm.astype(np.float32)return glcm"""计算纹理特征"""
def fast_textural_features(glcm, vmin=0, vmax=255, levels=8, kernel_size=5):_,_,h,w = glcm.shape# 计算最大值max_  = np.max(glcm, axis=(0,1))# 计算熵pnorm = glcm / np.sum(glcm, axis=(0,1)) + 1./kernel_size**2ent  = np.sum(-pnorm * np.log(pnorm), axis=(0,1))# 均值/标准差/对比度/相异性/同质性/角二阶距mean,std2,cont,diss,homo,asm = [np.zeros((h,w), dtype=np.float32) for x in range(6)]for i in range(levels):for j in range(levels):mean += glcm[i,j] * i / (levels)**2 # 计算均值cont += glcm[i,j] * (i-j)**2 # 计算对比度diss += glcm[i,j] * np.abs(i-j) # 计算相异性homo += glcm[i,j] / (1.+(i-j)**2) # 计算同质性asm  += glcm[i,j]**2 # 计算角二阶距# 计算能量ene = np.sqrt(asm)# 计算标准差for i in range(levels):for j in range(levels):std2 += (glcm[i,j] * i - mean)**2std = np.sqrt(std2)   return [max_,ent,mean,std,cont,diss,homo,asm,ene]if __name__ == '__main__':img = cv2.imread("input.png",0) # 以灰度读取glcm = fast_glcm(img, vmin=0, vmax=255, levels=8, kernel_size=5, distance=1.0, angle=0.0) # 计算共生矩阵textural = fast_textural_features(glcm, vmin=0, vmax=255, levels=8, kernel_size=5)

Python计算图像纹理-灰度共生矩阵相关推荐

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

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

  2. 使用OpenCV和Python计算图像的“彩色度”

    使用OpenCV和Python计算图像"彩色度" 1. 效果图 2. 炫彩度量方法是什么? 3. 源代码 参考 你是否尝试过计算每个图像的炫彩值,并根据炫彩值对自己的图像数据集进行 ...

  3. 图像特征提取——灰度共生矩阵(GLCM)

    灰度共生矩阵(Gray-level Co-occurrence Matrix,GLCM) 又叫做灰度共现矩阵 概念: 像素灰度在空间位置上的反复出现形成图像的纹理,GLCM是描述具有某种空间位置关系两 ...

  4. 用python计算图像面积_地图图像中屋顶面积的计算

    我是一个R用户,在使用Python进行图像分析时遇到了问题.什么是计算图像中心建筑物面积的有效方法?其目标是将边缘算法应用于googlemaps静态图像,并计算地址屋顶的表面积.在from pygeo ...

  5. python计算图像的曲率

    由于某些原因,需要计算图像的曲率.找了半天,网上都是曲率滤波的代码,而没有计算图像曲率的代码.于是去找曲率的计算公式,发现公式很简单,所以自己就用python写了一下. 平均曲率的计算公式如下所示 p ...

  6. Python绘制图像的灰度直方图、累计直方图

    在计算机视觉中,对图像进行预处理时经常会用到图像的直方图.累计直方图等.下面给出一种参考代码,用python绘制图像灰度直方图和累计直方图. # -*- coding: utf-8 -*- " ...

  7. 模式识别作业,基于python提取图像纹理特征

    其中的直方图的绘画部分要注意,只写了部分的直方图代码###直接调用skimag库中的函数BLP提取纹理 from skimage import dataimport matplotlib.pyplot ...

  8. python绘制灰度图片直方图-python – numpy图像中灰度值的直方图

    我将图像加载到numpy数组中,并希望在直方图中绘制其颜色值. import numpy as np from skimage import io from skimage import color ...

  9. (python)计算图像峰值信噪比-PSNR、结构相似度-SSIM

    计算峰值信噪比-PSNR和结构相似度-SSIM(python实现) 说明: PSNR(Peak Signal to Noise Ratio),取值范围为:[0,100],PSNR值越大两张图片越相似, ...

最新文章

  1. linux下 mysql 的root用户忘记密码解决方案
  2. JIT编译器杂谈#1:JIT编译器的血缘(一)
  3. nlp mrc的损失是什么_你对NLP的迁移学习爱的有多深?21个问题弄懂最新的NLP进展...
  4. swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)...
  5. 轻量级 Kubernetes K3s - Github热点
  6. Data Analysis: What are the skills needed to become a data analyst?
  7. Javascript 对象继承 原型链继承 对象冒充 call 混合方式
  8. 不小心运行了一个***程序~word 2003 打开2007格式文件的转换器.rar 里的
  9. 个人课中所学vlan相关知识整理
  10. linux模拟tcp测试工具,TCP测试小工具tcping for linux
  11. python如何计算等额本息还款_银行等额本息还款算法
  12. JavaScript实现12进制的时钟特效
  13. 校园网页设计成品 学校班级网页制作模板 大学生静态HTML网页源码 dreamweaver网页作业 简单网页课程成品
  14. 【图片新闻】美海军的下一艘战舰与“祖姆沃尔特”DDG-1000极其相似
  15. 大陆引进《火影忍者》角色中文译名雷人出炉
  16. JavaScript---Beacons图片信标发送数据
  17. 运维工程师之日常巡检
  18. 十分钟带你了解阿里、美团、滴滴、头条等互联网头部大厂面经
  19. WMS仓储系统值得提高的功能点
  20. 电脑常识:连不上网络,只显示飞行模式?

热门文章

  1. idea中安装统计代码statistic插件
  2. 基于图像风格迁移的人脸卡通化设计与实现
  3. Elasticsearch 分布式架构原理
  4. Axure RP9 进度条设置
  5. 计算机手工操作管理方式是处于什么时代,2管理系统中计算机应用.ppt
  6. Sallen-Key低通滤波器设计
  7. PADS显示元件值并打印贴片图
  8. 漏刻有时数据大屏CSS样式表成长教程(2):九宫格图表背景自适应的解决方案
  9. 64位mysql 和32位区别_navicat for mysql 64位和32位区别,win7 64位下用32位和64位有区别吗??...
  10. UML教程1:模型图的构成和功能说明