·在网上搜集了一下大家关于灰度矩阵的计算,利用greycomatrix进行提取,但就是结果训练效果一般,简直是太差了,无法直接使用。
#灰度共生矩阵
from skimage.feature import greycomatrix, greycoprops
import numpy as np
import pandas as pd
import os
import cv2
from openpyxl.workbook import Workbook
#获取文件路径
def photo_address(path):
lis=os.listdir(path)
final_=[]
for i in lis:
final_.append(path+"/"+i)
print(len(final_))
return final_
#获取最大的灰度等级,为了减小运算,灰度等级的减小,一般的灰度图0-255,较少运算,降为16
def get_gray_grade(gray_iamge):
src_data=gray_iamge.copy()
max_level=0
height,width=gray_iamge.shape
for i in range(height):
for j in range (width):
if(gray_iamge[i][j]>=max_level):
max_level = gray_iamge[i][j]
if((max_level+1)> 16):
for i in range(height):
for j in range (width):
src_data[i][j] = src_data[i][j]*16/(max_level+1)
return src_data
#提取GLCM
def get_glcm(image_path):
width,height=512,512
kinds_data=[]
for i in image_path:
image_data=[]
image=cv2.imread(i,cv2.IMREAD_COLOR)
resize_iamge=cv2.resize(image,(width,height))
gray_image=cv2.cvtColor(resize_iamge,cv2.COLOR_RGB2GRAY)
low_level_image = get_gray_grade(gray_image)
glcm=greycomatrix(low_level_image,[2,4,6,8],[0,np.pi/4,np.pi/2,np.pi*3/4],16)
for prop in {'contrast', 'dissimilarity','homogeneity', 'energy', 'correlation', 'ASM'}:
temp_ = greycoprops(glcm, prop)
temp=np.array(temp_).reshape(-1)
print(temp.shape)
image_data.append(temp)
kinds_data.append(np.concatenate(image_data))
return kinds_data
if __name__ =="__main__":
path=r"F:/rock_image/123"
excle_path=r"F:\rock_image\glcm_.xlsx"
dirs=photo_address(path)
data2=[]
for i in dirs:
file_=photo_address(i)
data1=get_glcm(file_)
data2.append(data1)
x_num=np.array(np.concatenate(data2))
wb=Workbook()
sheet=wb.active
m=int(len(x_num))
n=len(x_num[1])
for hang in range(1,m):
for lie in range(1,n+1):
sheet.cell(row=hang,column=lie).value=x_num[hang][lie-1]
wb.save(excle_path)