1 简介

图像的特征提取是图像的识别和分类、基于内容的图像检索、图像数据挖掘等研究内容的基础性工作,其中图像的纹理特征对描述图像内容具有重要意义,纹理特征提取已成为图像领域研究的一个重要方法。本文探讨了基于灰度共生矩阵( GLCM) 的纹理特征提取方法,给出了基于 MATLAB 的简便实现代码,分析了共生矩阵各个构造参数对构造共生矩阵的影响。实现基于灰度共生矩阵( GLCM) 的特定图像的纹理特征提取。

1.1 纹理

纹理特征是一种重要的视觉线索,是图像中普遍存在、而又难以描述的特征。纹理作为物体表面的一种基本属性,广泛存在自然界中,是描述和识别物体的一种极为重要的特征。纹理分析技术一直是计算机视觉、图像处理、图像分析、图像检索等的重要应用。纹理分析的研究内容主要包括:纹理分类和分割、纹理合成、纹理检索和由纹理恢复形状等。这些研究内容的一个最基本的问题是纹理特征提取。

1.2 纹理特征

图像的纹理特征描述了在图像中反复出现的局部规律和像素排列规则,反映了宏观意义上灰度变化的一些规律,图像可以看成是不同纹理区域的组合,纹理是对局部区域像素之间关系的一种度量。纹理特征可用于定量描述图像中的信息。

1.3 纹理特征提取方法

纹理特征提取的主要方法有统计方法、模型方法、信号处理方法和结构方法。本文所用的是统计方法;统计方法是基于像元及其邻域的灰度属性,研究纹理区域中的统计特性。实践证明,灰度共生矩阵在统计方法中具有很旺盛的生命,用该方法提取的纹理特征具有很好的鉴别能力。

1.4 灰度共生矩阵

共生矩阵用两个位置像素的联合概率密度来定义,它不仅反映亮度的分布特性,也反映具有同样亮度或接近亮度的像素之间的位置分布特性,是有关图像亮度变化的二阶统计特征。它是定义一组纹理特征的基础。由于纹理是由灰度分布在空间位置上反复出现而形成的,因而在图像空间中相隔某距离的两像素之间会存在一定的灰度关系,即图像中灰度的空间相关特性。灰度共生矩阵就是一种通过研究灰度的空间相关特性来描述纹理的常用

方法。灰度直方图是对图像上单个像素具有某个灰度进行统计的结果,而灰度共生矩阵是对图像上保持某距离的两像素分别具有某灰度的状况进行统计得到的。

支持向量机(support vector machine)是一种分类算法,通过寻求结构化风险最小来提高学习机泛化能力,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为二次规划问题的求解。

SVM 是一个二分类的分类模型,或者说叫做分类器,可以区分两类样本,它的思想是: 给定一个包含正例和反例的样本集合,SVM 的目的是寻求一个超平面对正例和反例进行分割。

2 部分代码

clc;clear all;close all;

img = imread('泥泞路面.jpg','jpg'); %imshow(image); %读取图片

img = rgb2gray(img);

img = histeq(img);imshow(img);

gray_leave = 256 ;%灰度级数

gray_leave_com = 16 ;%压缩后灰度级数

dx = 1 ; dy = 1 ;%搜寻灰度步进长度

[L,W] = size(img);%图片的尺寸,L长 ,W宽

%--------------------------------------------------------------------------

%2.为了减少计算量,对原始图像灰度级压缩,将img量化成16级

%--------------------------------------------------------------------------

for i = 1 : L

    for j = 1 : W

        for n = 1 : gray_leave_com

            if (n-1)*(gray_leave/gray_leave_com) <= img(i ,j)  &&  img(i ,j)<= (n-1)*(gray_leave/gray_leave_com )+(gray_leave/gray_leave_com )-1

                img(i ,j) = n-1;

            end

        end

    end

end

%--------------------------------------------------------------------------

%3.计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135

%--------------------------------------------------------------------------

P = zeros(gray_leave_com,gray_leave_com,4);

for m = 1 : gray_leave_com

    for n  = 1 : gray_leave_com

        for i = 1 : L

            for j = 1 : W     

                if (j<W && img(i , j) == m-1 && img(i ,j+dy) ==n-1) %角度为0

                    P(m , n , 1) = P(m, n ,1) + 1 ;

                end

                if (i<L && j<W && img(i , j) == m-1 && img(i +dx ,j+dy) ==n-1) %角度为45

                P(m , n , 2) = P(m, n ,2) + 1;

                end

                if (i<L && img(i , j) == m-1 && img(i +dx ,j) ==n-1) %角度为90

                P(m , n , 3) = P(m, n ,3) + 1;

                end

                if ( j>1 && i<L && img(i , j) == m-1 && img(i +dx ,j - dy ) ==n-1) %角度为135

                P(m , n , 4) = P(m, n ,4) + 1;

                end

            end

        end

    end

end

%%---------------------------------------------------------

% 对共生矩阵归一化

%%---------------------------------------------------------

for n=1:4

    P(:,:,n)=P(:,:,n)/sum(sum(P(:,:,n)));

end

%--------------------------------------------------------------------------

%4.对共生矩阵计算(二阶矩)能量、熵、惯性矩、相关、逆差分阵5个纹理参数

%--------------------------------------------------------------------------

Ans_data = zeros(1,4);

energy = Ans_data ; %二阶矩

contrast= Ans_data ;%对比度(惯性矩)

correlation = Ans_data ; %相关度

entropy = Ans_data ;%熵

deficit = Ans_data ;%逆差分阵

mean_x = Ans_data ; %均值

mean_y = Ans_data ; %均值

variance_x = Ans_data ; %均方差

variance_y = Ans_data ; %均方差

Exy = Ans_data;

for n = 1:4

    energy(n) = sum(sum(P(:,:,n).^2));%二阶矩

    for i = 1:gray_leave_com

        for j = 1:gray_leave_com

            if P(i, j ,n)~=0

                entropy(n) = -P(i, j ,n)*log(P(i, j ,n)) + entropy(n) ;%熵

            end

            contrast(n) = (i - j)^2*P(i, j ,n) + contrast(n) ;

            mean_x(n) = i*P(i, j ,n) + mean_x(n);

            mean_y(n) = j*P(i, j ,n) + mean_y(n);

        end

    end

end

for n = 1:4

    for i = 1:gray_leave_com

        for j = 1:gray_leave_com

            variance_x(n) = (i - mean_x(n))^2 * P(i, j ,n) + variance_x(n);

            variance_y(n) = (j - mean_y(n))^2 * P(i, j ,n) + variance_y(n);

            Exy(n) = i*j*P(i, j ,n) +  Exy(n) ;

            deficit(n) = P(i, j ,n)/(1+(i-j)^2) + deficit(n) ;

        end

    end

    correlation(n) = (Exy(n) - mean_x(n)*mean_y(n))/(variance_x(n)*variance_y(n));

end

sprintf('0,45,90,135方向上的能量依次为: %f, %f, %f, %f' , energy(1),energy(2),energy(3),energy(4))

sprintf('0,45,90,135方向上的熵依次为: %f, %f, %f, %f' , entropy(1),entropy(2),entropy(3),entropy(4))

sprintf('0,45,90,135方向上的对比度(惯性矩)依次为: %f, %f, %f, %f' , contrast(1),contrast(2),contrast(3),contrast(4))

sprintf('0,45,90,135方向上的相关度依次为: %f, %f, %f, %f' , correlation(1),correlation(2),correlation(3),correlation(4))

sprintf('0,45,90,135方向上的逆差矩依次为: %f, %f, %f, %f' , deficit(1),deficit(2),deficit(3),deficit(4))

subplot(3,2,1);plot(energy,'r');xlabel('角度');ylabel('能量');grid on

subplot(3,2,2);plot(entropy);xlabel('角度');ylabel('熵');grid on

subplot(3,2,3);plot(contrast);xlabel('角度');ylabel('对比度');grid on

subplot(3,2,4);plot(correlation);xlabel('角度');ylabel('相关度');grid on

subplot(3,2,5);plot(deficit);xlabel('角度');ylabel('逆差');grid on

%--------------------------------------------------------------------------

%5.对共生矩阵计算能量、熵、惯性矩、相关、逆差分阵5个纹理参数的均值和方差

%--------------------------------------------------------------------------

E_mean = mean(energy);E_variance = sqrt(cov(energy));

EN_mean = mean(entropy);EN_variance = sqrt(cov(entropy));

CON_mean = mean(contrast);CON_variance = sqrt(cov(contrast));

COR_mean =  mean(correlation) ;COR_variance = sqrt(cov(correlation));

D_mean = mean(deficit);D_variance = sqrt(cov(deficit));

sprintf('能量的均值和标准差分别为: %f,%f',E_mean,E_variance)

sprintf('熵的均值和标准差分别为: %f,%f',EN_mean,EN_variance)

sprintf('惯性矩的均值和标准差分别为: %f,%f',CON_mean,CON_variance)

sprintf('相关性的均值和标准差分别为: %f,%f',COR_mean,COR_variance)

sprintf('逆差距的均值和标准差分别为: %f,%f',D_mean,D_variance)

3 仿真结果

【路面分类】基于灰度共生矩阵图形纹理检测结合支持向量机实现路面状况分类附Matlab代码_共生矩阵

【路面分类】基于灰度共生矩阵图形纹理检测结合支持向量机实现路面状况分类附Matlab代码_共生矩阵_02

【路面分类】基于灰度共生矩阵图形纹理检测结合支持向量机实现路面状况分类附Matlab代码_共生矩阵_03

【路面分类】基于灰度共生矩阵图形纹理检测结合支持向量机实现路面状况分类附Matlab代码_共生矩阵_04

【路面分类】基于灰度共生矩阵图形纹理检测结合支持向量机实现路面状况分类附Matlab代码_共生矩阵_05

【路面分类】基于灰度共生矩阵图形纹理检测结合支持向量机实现路面状况分类附Matlab代码_共生矩阵_06

4 参考文献

[1]陈英, 杨丰玉, and 符祥. "基于支持向量机和灰度共生矩阵的纹理图像分割方法." 传感器与微系统 31.9(2012):4.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【路面分类】基于灰度共生矩阵图形纹理检测结合支持向量机实现路面状况分类附Matlab代码_共生矩阵_07