灰度共生矩阵_第1页
灰度共生矩阵_第2页
灰度共生矩阵_第3页
灰度共生矩阵_第4页
灰度共生矩阵_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、灰度共生矩阵概念:像素灰度在空间位置上的反复出现形成图像的纹理,GLCM是描述具有某种空间位置关系两个像素灰度的联合分布含义:就是两个像素灰度的联合直方图,是一种二阶统计量就是两个像素点的关系 $ =像素关系可以根据不同的纹理特性进行选择,也就是。工 %的大小可以自由选像素的空间位置关系:取。对于较细的纹理分析可以取像素间距为1,6= (土U是水平扫描;s =(0 1)是垂直扫描; 在三(-1,1)是45度扫描; ”T1)是135度扫描(原博文有错误)。一旦位置空间确定,就可以生成灰度共生矩阵。矩阵的物理意义:用表示灰度共生矩阵,它是一个L X上的矩阵(L为灰度级,就是一幅图中包含的不同灰度或

2、者颜色的个数) ,凡,力(仃L2,上一 1)是具有空间位置关系且灰度分别为i和j的两个像素出现的次数或频率(归一化)例如:下图是某纹理像素的放大,和对应的像素灰度矩阵此图像只有三种灰度,故灰度级为3,灰度共生矩阵是一个3*3的矩阵0 10 10 = (1,0)2 : 10 0 1010 10 0归一化形式为,01/61/6Ps = i/601/61/6 1/60改变位置空间的定义,灰度共生矩阵相应地改变:16 0 0?=0 16 0 ,=0 0 18归一化形式为:8/2500Ps= 08/250009/25-矩阵的特征量:从灰度共生矩阵上可以简单的看出,如果对角附近的元素有较大的值,说明图像的

3、像素具有相似的像素值,如果偏离对角线的元素会有比较大的值,说明像素灰度在局部有较大变化。为了得到更多的纹理特征,我们还需要在进行计算: 对比度)(或反差)(contrast):纹理沟纹越深,其对比度越大,视觉效果越清晰;反之,对比度小,则沟纹浅,效果模糊。灰度差即对比度大的象素对越多,这个值越大。灰度公生矩阵中远离对角线的元素值越大,con越大。所以con越大图像越清晰相关度 (inverse different moment ):度量空间灰度共生矩阵元素在行或列方向上的相似程度,因此,相关值大小反映了图像中局部灰度相关性。当矩阵元素值均匀相等时,相关值就大;相反,如果矩阵像元值相差很大则相关

4、值小。IDE =反映了图像灰度分布均匀程度和纹能量:是灰度共生矩阵元素值的平方和,所以也称之为能量,理粗细度。ASM值大表明一种较均一和规则变化的纹理模式。Wi嫡(entropy):嫡在物理中的含义就是物体的规则度,越有序嫡越小,越无序嫡越大。此处嫡同样表示图像的信息量,当共生矩阵中所有元素有最大的随机性、空间共生矩阵中所有值几乎相等时,共生矩阵中元素分散分布时,嫡较大。它表示了图像中纹理的非均匀程度或复杂程度。Em*=工(3力1吨国力自相关(correlation):反应了图像纹理的一致性。如果图像中有水平方向纹理,则水平方向矩阵 的COR大于其余矩阵的COR值。代码:GLCM.h#incl

5、ude#include #include #includeiterator#includefunctional#includealgorithm#include using namespace std;using namespace cv;typedef vectorvector VecGLCM;typedef struct _GLCMFeatures_GLCMFeatures():energy(0.0),entropy(0.0),contrast(0.0),idMoment(0.0)double energy;/ 能量double entropy;/ 嫡double contrast; /

6、对比度double idMoment; / 逆差分矩,inverse difference moment GLCMFeatures;class GLCMpublic:GLCM();GLCM();public:/ 枚举灰度共生矩阵的方向enumGLCM_HORIZATION = 0,/ 水平GLCM_VERTICAL = 1,/ 垂直GLCM_ANGLE45 = 2,/ 45 度角GLCM_ANGLE135 = 3/ 135 度角;public:/ 计算灰度共生矩阵void calGLCM(IplImage* inputImg, VecGLCM& vecGLCM, int angle);/ 计算

7、特征值void getGLCMFeatures(VecGLCM& vecGLCM, GLCMFeatures& features);public:/ 初始化灰度共生矩阵void initGLCM(VecGLCM& vecGLCM, int size = 16);/ 设置灰度划分等级,默认值为16void setGrayLevel(int grayLevel) m_grayLevel = grayLevel; / 获取灰度等级int getGrayLevel() const return m_grayLevel; private:/ 计算水平灰度共生矩阵void getHorisonGLCM(V

8、ecGLCM &src, VecGLCM &dst, int imgWidth, int imgHeight);/ 计算垂直灰度共生矩阵void getVertialGLCM(VecGLCM &src, VecGLCM &dst, int imgWidth, int imgHeight);/ 计算45 度灰度共生矩阵void getGLCM45(VecGLCM &src, VecGLCM &dst, int imgWidth, int imgHeight);/ 计算135 度灰度共生矩阵void getGLCM135(VecGLCM &src, VecGLCM &dst, int imgWid

9、th, int imgHeight); private:int m_grayLevel; / 将灰度共生矩阵划分为grayLevel 个等级;GLCM.cpp#include GLCM.hGLCM:GLCM() : m_grayLevel(16)GLCM:GLCM()/=/函数名称:initGLCM/参数说明:vecGLCM,要进行初始化的共生矩阵,为二维方阵/ size,二维矩阵的大小,必须与图像划分的灰度等级相等/函数功能:初始化二维矩阵/= void GLCM:initGLCM(VecGLCM& vecGLCM, int size)(assert(size = m_grayLevel);

10、vecGLCM.resize(size);for (int i = 0; i size; +i)(vecGLCMi.resize(size);for (int i = 0; i size; +i)(for (int j = 0; j size; +j)(vecGLCMij = 0;/=/ 函数名称:getHorisonGLCM/参数说明:src,要进行处理的矩阵,源数据/dst,输出1阵,计算后的矩阵,即要求的灰度共生矩阵/imgWidth,图像宽度/imgHeight,图像高度/函数功能:计算水平方向的灰度共生矩阵/= void GLCM:getHorisonGLCM(VecGLCM &sr

11、c, VecGLCM &dst, int imgWidth, int imgHeight) (int height = imgHeight;int width = imgWidth;for (int i = 0; i height; +i)(for (int j = 0; j width - 1; +j)(int rows = srcij;int cols = srcij + 1;dstrowscols+;)/=/ 函数名称:getVertialGLCM/参数说明:src,要进行处理的矩阵,源数据/dst,输出1阵,计算后的矩阵,即要求的灰度共生矩阵/imgWidth,图像宽度/imgHeig

12、ht,图像高度/函数功能:计算垂直方向的灰度共生矩阵/= void GLCM:getVertialGLCM(VecGLCM &src, VecGLCM &dst, int imgWidth, int imgHeight)int height = imgHeight;int width = imgWidth;for (int i = 0; i height - 1; +i)for (int j = 0; j width; +j)int rows = srcij;int cols = srci + 1j;dstrowscols+;)/=/函数名称:getGLCM45/参数说明:src,要进行处理的

13、矩阵,源数据/dst,输出1阵,计算后的矩阵,即要求的灰度共生矩阵/imgWidth,图像宽度/imgHeight,图像高度/函数功能:计算45度的灰度共生矩阵/= void GLCM:getGLCM45(VecGLCM &src, VecGLCM &dst, int imgWidth, int imgHeight) int height = imgHeight;int width = imgWidth;for (int i = 0; i height - 1; +i)for (int j = 0; j width - 1; +j)(int rows = srcij;int cols = sr

14、ci + 1j + 1;dstrowscols+;/=/ 函数名称:getGLCM135/参数说明:src,要进行处理的矩阵,源数据/dst,输出1阵,计算后的矩阵,即要求的灰度共生矩阵/imgWidth,图像宽度/imgHeight,图像高度/函数功能:计算135度的灰度共生矩阵/= void GLCM:getGLCM135(VecGLCM& src, VecGLCM& dst, int imgWidth, int imgHeight)(int height = imgHeight;int width = imgWidth;for (int i = 0; i height - 1; +i)(

15、for (int j = 1; j nChannels = 1);IplImage* src = NULL;src = cvCreateImage(cvGetSize(inputImg), IPL_DEPTH_32S, inputImg -nChannels); cvConvert(inputImg, src);int height = src -height;int width = src -width;int maxGrayLevel = 0;/ 寻找最大像素灰度最大值for (int i = 0; i height; +i)for (int j = 0; j maxGrayLevel)m

16、axGrayLevel = grayVal;/ end for i+maxGrayLevel;VecGLCM tempVec;/ 初始化动态数组tempVec.resize(height);for (int i = 0; i 16)/ 若灰度级数大于16,则将图像的灰度级缩小至16 级,减小灰度共生矩阵的大小。for (int i = 0; i height; +i)for (int j = 0; j width; +j)int tmpVal = cvGetReal2D(src, i, j);tmpVal /= m_grayLevel;tempVecij = tmpVal;if (angle

17、= GLCM_HORIZATION) / 水平方向getHorisonGLCM(tempVec, vecGLCM, width, height);if (angle = GLCM_VERTICAL) / 垂直方向getVertialGLCM(tempVec, vecGLCM, width, height);if (angle = GLCM_ANGLE45) / 45 度灰度共生阵 getGLCM45(tempVec, vecGLCM, width, height);if (angle = GLCM_ANGLE135) / 135 度灰度共生阵 getGLCM135(tempVec, vecGL

18、CM, width, height);else/若灰度级数小于16,则生成相应的灰度共生矩阵for (int i = 0; i height; +i)for (int j = 1; j width; +j)int tmpVal = cvGetReal2D(src, i, j);tempVecij = tmpVal;if (angle = GLCM_HORIZATION) / 水平方向 getHorisonGLCM(tempVec, vecGLCM, width, height);if (angle = GLCM_VERTICAL) / 垂直方向 getVertialGLCM(tempVec,

19、vecGLCM, width, height);if (angle = GLCM_ANGLE45) / 45 度灰度共生阵 getGLCM45(tempVec, vecGLCM, width, height);if (angle = GLCM_ANGLE135) / 135 度灰度共生阵 getGLCM135(tempVec, vecGLCM, width, height);cvReleaseImage(&src);/=/ 函数名称:getGLCMFeatures/参数说明:vecGLCM,输入!阵,灰度共生阵/features,灰度共生矩阵计算的特征值,主要包含了能量、嫡、对比度、逆差分矩/

20、函数功能:根据灰度共生矩阵计算的特征值/= void GLCM:getGLCMFeatures(VecGLCM& vecGLCM, GLCMFeatures& features) int total = 0;for (int i = 0; i m_grayLevel; +i) for (int j = 0; j m_grayLevel; +j)/求所有图像的灰度值的和total += vecGLCMij;vectorvector temp;temp.resize(m_grayLevel);for (int i = 0; i m_grayLevel; +i) tempi.resize(m_gra

21、yLevel);/ 归一化for (int i = 0; i m_grayLevel; +i) for (int j = 0; j m_grayLevel; +j)tempij = (double)vecGLCMij / (double)total;for (int i = 0; i m_grayLevel; +i)for (int j = 0; j 0)features.entropy -= tempij * log(tempij);/熵features.contrast += (double)(i - j)*(double)(i - j)*tempij;/对比度features.idMom

22、ent += tempij / (1 + (double)(i - j)*(double)(i - j);/ 逆差矩 main.cpp #include GLCM.h#include void getFileName();string names2000;char data20;数值处理背景 ;int main() fstream finout1(data.txt, ios:in | ios:out|ios:trunc);getFileName();int i = 0;char data120;while (namesi.length() 5)strcpy_s(data1, namesi.c_

23、str();string imagename = data1;/灰度共生矩阵IplImage* img = cvLoadImage(data1, 0);cvSetImageROI(img, cvRect(1453, 1149,557, 557);/*cvNamedWindow(ShowSRC);cvShowImage(ShowSRC,img);cvWaitKey(0); */GLCM glcm;VecGLCM vec;GLCMFeatures features;glcm.initGLCM(vec);/ 水平glcm.calGLCM(img, vec, GLCM:GLCM_HORIZATION)

24、;glcm.getGLCMFeatures(vec, features);double energy_hor = features.energy;double entropy_hor = features.entropy;double contrast_hor = features.contrast;double idMoment_hor = features.idMoment;/ 垂直glcm.calGLCM(img, vec, GLCM:GLCM_VERTICAL);glcm.getGLCMFeatures(vec, features);double energy_vetical = fe

25、atures.energy;double entropy_vetical = features.entropy;double contrast_vetical = features.contrast;double idMoment_vetical = features.idMoment;/ 45 度glcm.calGLCM(img, vec, GLCM:GLCM_ANGLE45);glcm.getGLCMFeatures(vec, features);double energy_45 = features.energy;double entropy_45 = features.entropy;double contrast_45 = features.contrast;double idMoment_45 = features.idMoment;/ 135 度glcm.calGLCM(img, vec, GLCM:GLCM_ANGLE135);glcm.getGLCMFeatures(vec, features);double energy_135 = features.energy;double entropy_135 = features.entropy;double contrast_135 = features.contrast

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论