【Python】灰度共生矩阵(GLCM)附Python代码

【Python】灰度共⽣矩阵(GLCM)附Python代码
参考⽂献:.
简介
灰度共⽣矩阵(Gray-Level Co-occurrence Matrix,GLCM)统计了灰度图中像素间的灰度值分布规律以区分不同的纹理
度共⽣矩阵可以定义为⼀个灰度为i ii的像素点与另⼀个与之对应位置上的像素点的灰度值为j jj的概率。那么所有估计的值可以表⽰成⼀个矩阵的形式,以此被称为灰度共⽣矩阵。如:根据图像中任意⼀点 ( x , y ) (x,y)(x,y) 的灰度值和它所对应的点 ( x + d x , y + d y )
(x+d_x,y+d_y)(x+dx,y+dy) 的灰度值可以得到⼀个灰度值组合 ( g 1 , g 2 ) (g_1,g_2)(g1,g2)。统计整福图像每⼀种灰度值组合出现的概率矩阵 P PP 即为灰度共⽣矩阵。
由于灰度共⽣矩阵的维度较⼤,⼀般不直接作为区分纹理的特征,⽽是基于它构建的⼀些统计量作为纹理分类特征。例如H a r a l i c k HaralickHaralick曾提出了14种基于灰度共⽣矩阵计算出来的统计量:能量、熵、对⽐度、均匀性、相关性、⽅差、和平均、和⽅差、和熵、差⽅差、差平均、差熵、相关信息测度以及最⼤相关系数。
举例⼏种常⽤的统计值
1.⾓⼆阶矩(Angular Second Moment, ASM)
⾓⼆阶矩⼜称能量,是图像灰度分布均匀程度和纹理粗细的⼀个度量,反映了图像灰度分布均匀程度和纹理粗细度。当图像纹理均⼀规则时,能量值较⼤;反之灰度共⽣矩阵的元素值相近,能量值较⼩。
2.熵(Entropy, ENT)
熵度量了图像包含信息量的随机性,表现了图像的复杂程度。当共⽣矩阵中所有值均相等或者像素值表现出最⼤的随机性时,熵最⼤。
3.对⽐度
对⽐度反应了图像的清晰度和纹理的沟纹深浅。纹理越清晰反差越⼤对⽐度也就越⼤。
4.反差分矩阵(Inverse Differential Moment, IDM)
反差分矩阵⼜称逆⽅差,反映了纹理的清晰程度和规则程度,纹理清晰、规律性较强、易于描述的,值较⼤。
Python 代码如下
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import cv2
import math
#定义最⼤灰度级数
gray_level = 16
def maxGrayLevel(img):
max_gray_level=0
(height,width)=img.shape
print height,width
for y in range(height):
for x in range(width):
if img[y][x] > max_gray_level:
if img[y][x] > max_gray_level:
max_gray_level = img[y][x]
return max_gray_level+1
def getGlcm(input,d_x,d_y):
py()
ret=[[0.0 for i in range(gray_level)] for j in range(gray_level)]
(height,width) = input.shape
max_gray_level=maxGrayLevel(input)
#若灰度级数⼤于gray_level,则将图像的灰度级缩⼩⾄gray_level,减⼩灰度共⽣矩阵的⼤⼩    if max_gray_level > gray_level:
for j in range(height):
for i in range(width):
srcdata[j][i] = srcdata[j][i]*gray_level / max_gray_level
for j in range(height-d_y):
for i in range(width-d_x):
rows = srcdata[j][i]
cols = srcdata[j + d_y][i+d_x]
ret[rows][cols]+=1.0
for i in range(gray_level):
for j in range(gray_level):
ret[i][j]/=float(height*width)
return ret
火地人def feature_computer(p):
Con=0.0
Eng=0.0
Asm=0.0
Idm=0.0
for i in range(gray_level):
for j in range(gray_level):
Con+=(i-j)*(i-j)*p[i][j]
Asm+=p[i][j]*p[i][j]
Idm+=p[i][j]/(1+(i-j)*(i-j))
if p[i][j]>0.0:
m110 sassEng+=p[i][j]*math.log(p[i][j])
return Asm,Con,-Eng,Idm
健康指数def test(image_name):
img = cv2.imread(image_name)
try:
什么叫差动保护img_shape=img.shape
2012中国肿瘤登记年报
except:
print 'imread error'
return
size(img,(img_shape[1]/2,img_shape[0]/2),interpolation=cv2.INTER_CUBIC)
img_gray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
glcm_0=getGlcm(img_gray, 1,0)
#glcm_1=getGlcm(src_gray, 0,1)
#glcm_2=getGlcm(src_gray, 1,1)
#glcm_3=getGlcm(src_gray, -1,1)
王志 面对面asm,con,eng,idm=feature_computer(glcm_0)
return [asm,con,eng,idm]
if __name__=='__main__':
result = test("test.bmp")
result = test("test.bmp")
print(result)
参考⽂献
1. Haralick R M, Shanmugam K, Dinstein I. Textural Features for Image Classification[J]. Systems Man & Cybernetics IEEE
Transactions on, 1973, smc-3(6):610-621.

本文发布于:2024-09-23 19:21:05,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/104939.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:灰度   图像   纹理
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议