灰度共生矩阵 GLCM

·在网上搜集了一下大家关于灰度矩阵的计算,利用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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值