纹理_纹理特征 - CSDN
精华内容
参与话题
  • 纹理特征简介

    万次阅读 多人点赞 2015-03-27 14:26:51
    纹理的定义: 纹理是一种反映图像中同质现象的视觉特征,它体现了物体表面的具有缓慢变化或者周期性变化的表面结构组织排列属性。纹理具有三大标志:某种局部序列性不断重复、非随机排列、纹理区域内大致为均匀的...

    纹理的定义:

    纹理是一种反映图像中同质现象的视觉特征,它体现了物体表面的具有缓慢变化或者周期性变化的表面结构组织排列属性。纹理具有三大标志:某种局部序列性不断重复、非随机排列、纹理区域内大致为均匀的统一体。纹理不同于灰度、颜色等图像特征,它通过像素及其周围空间邻域的灰度分布来表现,即:局部纹理信息。局部纹理信息不同程度的重复性,即全局纹理信息。

     

    纹理的分类:

    纹理特征可以分为四种类型:

    (1)统计型纹理特征:

    基于像元及其邻域内的灰度属性,研究纹理区域中的统计特征,或者像元及其邻域内灰度的一阶、二阶或者高阶统计特征。

    统计型纹理特征中以GLCM(灰度共生矩阵)为主,它是建立在估计图像的二阶组合条件概率密度基础上的一种方法。GLCM主要描述在theta方向上,相隔d个像元距离的一对像元分别具有灰度值i和j的出现的概率。尽管GLCM提取的纹理特征具有较好的鉴别能力,但是这个方法在计算上是昂贵的,尤其是对于像素级的纹理分类更具有局限性。并且,GLCM的计算较为耗时,好在不断有研究人员对其提出改进。

     

    (2)模型型纹理特征:

    假设纹理是以某种参数控制的分布模型方式形成的,从纹理图像的实现来估计计算模型参数,以参数为特征或采用某种策略进行图像分割,因此,模型参数的估计是这种方法的核心问题。

    模型型纹理特征提取方法以随机场方法和分形方法为主。

    随机场模型方法:试图以概率模型来描述纹理的随机过程,它们对随机数据或随机特征进行统计运算,进而估计纹理模型的参数,然后对一系列的模型参数进行聚类,形成和纹理类型数一致的模型参数。由估计的模型参数来对灰度图像进行逐点的最大后验概率估计,确定像素及其邻域情况下该像素点最可能归属的概率。随机场模型实际上描述了图像中像素对邻域像素的统计依赖关系。

    分形模型方法:分数维作为分形的重要特征和度量,把图像的空间信息和灰度信息简单而又有机的结合起来,因而在图像处理中备受人们的关注。分数维在图像处理中的应用时以两点为基础:(a)自然界中不同种类的形态物质一般具有不同的分形维;(b)由于研究人员的假设,自然界中的分形与图像的灰度表示之间存在着一定的对应关系。研究表明,人类视觉系统对于粗糙度和凹凸性的感受与分形维数之间有着非常密切的联系。因此,可以用图像区域的分形维数来描述图像区域的纹理特征。分形维描述纹理的核心问题是如何准确地估计分形维。

     

     

    (3)信号处理型纹理特征:

    建立在时域、频域分析与多尺度分析基础之上,对纹理图像中某个区域内实行某种变换之后,再提取保持相对平稳的特征值,以此特征值作为特征表示区域内的一致性以及区域间的相异性。

    信号处理类的纹理特征主要是利用某种线性变换、滤波器或者滤波器组将纹理转换到变换域,然后应用某种能量准则提取纹理特征。因此,基于信号处理的方法也称之为滤波方法。大多数信号处理方法的提出,都基于这样一个假设:频域的能量分布能够鉴别纹理。

     

    (4)结构型纹理特征:

    基于“纹理基元”分析纹理特征,着力找到纹理基元,认为纹理由许多纹理基元构成,不同类型的纹理基元、不同的方向及数目,决定了纹理的表现形式。

     

    以上四种纹理特征提取方法中,信号处理型纹理特征主要从变换域提取纹理特征,其余三种纹理提取方法则直接从图像域提取纹理特征。各种类型的纹理特征提取方法之间既有区别又有联系。




    展开全文
  • a)针对合成纹理图像(共有4个合成纹理图像,见文件夹:data\Texture_mosaic)中每一个像素提取纹理特征向量(提取纹理特征的方法可以为课堂讲的,也可以自己查找资料); b)利用聚类技术(推荐用k-均值聚类,可以...
  • 初学OpenGL(4):纹理

    千次阅读 2018-05-01 15:47:20
    1、纹理是什么 纹理(Texture)是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了。因为...

    1、纹理是什么

        纹理(Texture)是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了。因为我们可以在一张图片上插入非常多的细节,这样就可以让物体非常精细而不用指定额外的顶点。

    2、纹理的映射(Map)

        为了把纹理映射到我们的图形上,需要给每个顶点关联一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(采集片段颜色)。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。

        纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D纹理图像)。使用纹理坐标获取纹理颜色叫做采样(Sampling)。纹理坐标起始于(0, 0),也就是纹理图片的左下角,终始于(1, 1),即纹理图片的右上角。

        例如,我们给绘制的三角形如下的映射关系:


        我们为三角形指定了3个纹理坐标点。我们只要给顶点着色器传递这三个纹理坐标就行了,接下来它们会被传片段着色器中,它会为每个片段进行纹理坐标的插值。

    float texCoords[] = {
        0.0f, 0.0f, // 左下角
        1.0f, 0.0f, // 右下角
        0.5f, 1.0f // 上中
    };

    3、纹理环绕方式(Wrapping)

        纹理坐标的范围通常是从(0, 0)到(1, 1),那如果我们把纹理坐标设置在范围之外会发生什么?OpenGL默认的行为是重复这个纹理图像(我们基本上忽略浮点纹理坐标的整数部分),但OpenGL提供了更多的选择:


        使用glTexParameter*函数对单独的一个坐标轴设置(s、t(如果是使用3D纹理那么还有一个r)它们和x、y、z是等价的):

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);

        第一个参数指定纹理目标(我们当前使用的是2D纹理);第二个参数指定选项和纹理轴(WRAP选项,S\T轴);最后一个参数指定环绕方式。

        如果使用CLAMP_TO_BORDER的环绕方式,还需要设置边缘颜色。这时需要使用fv后缀的函数,并传递一个float数组作为颜色值:

    float borderColor[] = { 1.0f, 1.0f, 0.0f, 1.0f };
    glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor);

    4、纹理过滤

        纹理坐标不依赖于分辨率(Resolution),它可以是任意浮点值,所以OpenGL需要知道怎样将纹理像素(Texture Pixel,也叫Texel,译注1)映射到纹理坐标。纹理过滤有很多个选项,但是现在我们只讨论最重要的两种:GL_NEAREST和GL_LINEAR。

        GL_NEAREST(也叫邻近过滤,Nearest Neighbor Filtering)是OpenGL默认的纹理过滤方式。当设置为GL_NEAREST的时候,OpenGL会选择中心点最接近纹理坐标的那个像素。

        GL_LINEAR(也叫线性过滤,(Bi)linear Filtering)它会基于纹理坐标附近的纹理像素,计算出一个插值,近似出这些纹理像素之间的颜色。一个纹理像素的中心距离纹理坐标越近,那么这个纹理像素的颜色对最终的样本颜色的贡献越大。

        

        当进行放大(Magnify)和缩小(Minify)操作的时候可以设置纹理过滤的选项,比如你可以在纹理被缩小的时候使用邻近过滤,被放大时使用线性过滤。我们需要使用glTexParameter*函数为放大和缩小指定过滤方式。

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    5、多级渐远纹理

        对于小物体,高分辨率纹理图片的情况来说,从高分辨率的图片上为小片段获取正确的颜色很困难。

        OpenGL使用一种叫做多级渐远纹理(Mipmap)的概念来解决这个问题,它简单来说就是一系列的纹理图像,后一个纹理图像是前一个的二分之一。多级渐远纹理背后的理念很简单:距观察者的距离超过一定的阈值,OpenGL会使用不同的多级渐远纹理,即最适合物体的距离的那个。glGenerateMipmaps函数用来生成多级纹理图片。


        在渲染中切换多级渐远纹理级别(Level)时,OpenGL在两个不同级别的多级渐远纹理层之间会产生不真实的生硬边界。就像普通的纹理过滤一样,切换多级渐远纹理级别时你也可以在两个不同多级渐远纹理级别之间使用NEAREST和LINEAR过滤。

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

        一个常见的错误是,将放大过滤的选项设置为多级渐远纹理过滤选项之一。这样没有任何效果,因为多级渐远纹理主要是使用在纹理被缩小的情况下的:纹理放大不会使用多级渐远纹理,为放大过滤设置多级渐远纹理的选项会产生一个GL_INVALID_ENUM错误代码。

    6、生成纹理

        生成一个纹理的过程应该像这样:

    unsigned int texture;
    glGenTextures(1, &texture);//参数1:生成纹理的数量 参数2:存储ID(如果多个纹理,则传入数组)
    glBindTexture(GL_TEXTURE_2D, texture);//绑定纹理
    // 为当前绑定的纹理对象设置环绕、过滤方式
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);   
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    // 加载并生成纹理
    int width, height, nrChannels;
    unsigned char *data = stbi_load("container.jpg", &width, &height, &nrChannels, 0);
    if (data)
    {
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
        glGenerateMipmap(GL_TEXTURE_2D);//生成多级渐远纹理
    }
    else
    {
        std::cout << "Failed to load texture" << std::endl;
    }
    stbi_image_free(data);
        纹理可以通过glTexImage2D来生成:
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
    glGenerateMipmap(GL_TEXTURE_2D);
        第一个参数指定纹理目标(Target),设置为GL_TEXTURE_2D意味着会生成与当前绑定的纹理对象在同一个目标上的纹理(任何绑定到GL_TEXTURE_1D和GL_TEXTURE_3D的纹理不会受到影响)。
        第二个参数为纹理指定多级渐远纹理的级别,如果你希望单独手动设置每个多级渐远纹理的级别的话。这里我们填0,也就是基本级别。
        第三个参数告诉OpenGL我们希望把纹理储存为何种格式。我们的图像只有RGB值,因此我们也把纹理储存为RGB值。
        第四个和第五个参数设置最终的纹理的宽度和高度。我们之前加载图像的时候储存了它们,所以我们使用对应的变量。
        下个参数应该总是被设为0(历史遗留的问题)。
        第七第八个参数定义了源图的格式和数据类型。我们使用RGB值加载这个图像,并把它们储存为char(byte)数组,我们将会传入对应值。

        最后一个参数是真正的图像数据。

    7、应用纹理

        我们需要调整顶点着色器使其能够接受顶点坐标为一个顶点属性,并把坐标传给片段着色器:

    #version 330 core
    layout (location = 0) in vec3 aPos;
    layout (location = 1) in vec3 aColor;
    layout (location = 2) in vec2 aTexCoord;
    
    out vec3 ourColor;
    out vec2 TexCoord;
    
    void main()
    {
        gl_Position = vec4(aPos, 1.0);
        ourColor = aColor;
        TexCoord = aTexCoord;
    }
        片段着色器也应该能访问纹理对象,但是我们怎样能把纹理对象传给片段着色器呢?GLSL有一个供纹理对象使用的内建数据类型,叫做采样器(Sampler),它以纹理类型作为后缀,比如sampler1D、sampler3D,或在我们的例子中的sampler2D。我们可以简单声明一个uniform sampler2D把一个纹理添加到片段着色器中,稍后我们会把纹理赋值给这个uniform。
    #version 330 core
    out vec4 FragColor;
    
    in vec3 ourColor;
    in vec2 TexCoord;
    
    uniform sampler2D ourTexture;
    
    void main()
    {
        FragColor = texture(ourTexture, TexCoord);
    }

        我们使用GLSL内建的texture函数来采样纹理的颜色,它第一个参数是纹理采样器,第二个参数是对应的纹理坐标。texture函数会使用之前设置的纹理参数对相应的颜色值进行采样。这个片段着色器的输出就是纹理的(插值)纹理坐标上的(过滤后的)颜色。

        记住在调用glDrawElements之前绑定纹理了,它会自动把纹理赋值给片段着色器的采样器:

    glBindTexture(GL_TEXTURE_2D, texture);
    glBindVertexArray(VAO);
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

    8、纹理单元

        使用glUniform1i,我们可以给纹理采样器分配一个位置值,这样的话我们能够在一个片段着色器中设置多个纹理。一个纹理的位置值通常称为一个纹理单元(Texture Unit)。一个纹理的默认纹理单元是0,它是默认的激活纹理单元。

        纹理单元的主要目的是让我们在着色器中可以使用多于一个的纹理。通过把纹理单元赋值给采样器,我们可以一次绑定多个纹理,只要我们首先激活对应的纹理单元。就像glBindTexture一样,我们可以使用glActiveTexture激活纹理单元,传入我们需要使用的纹理单元:
    glActiveTexture(GL_TEXTURE0); // 在绑定纹理之前先激活纹理单元
    glBindTexture(GL_TEXTURE_2D, texture);

        激活纹理单元之后,接下来的glBindTexture函数调用会绑定这个纹理到当前激活的纹理单元,纹理单元GL_TEXTURE0默认总是被激活。

        OpenGL至少保证有16个纹理单元供你使用,也就是说你可以激活从GL_TEXTURE0到GL_TEXTRUE15。它们都是按顺序定义的,所以我们也可以通过GL_TEXTURE0 + 8的方式获得GL_TEXTURE8。

    #version 330 core
    ...
    
    uniform sampler2D texture1;
    uniform sampler2D texture2;
    
    void main()
    {
        FragColor = mix(texture(texture1, TexCoord), texture(texture2, TexCoord), 0.2);
    }

        最终输出颜色现在是两个纹理的结合。GLSL内建的mix函数需要接受两个值作为参数,并对它们根据第三个参数进行线性插值。如果第三个值是0.0,它会返回第一个输入;如果是1.0,会返回第二个输入值。0.2会返回80%的第一个输入颜色和20%的第二个输入颜色,即返回两个纹理的混合色。

        为了使用第二个纹理(以及第一个),我们必须改变一点渲染流程,先绑定两个纹理到对应的纹理单元,然后定义哪个uniform采样器对应哪个纹理单元(在渲染循环内):

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture1);
    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_2D, texture2);
    
    glBindVertexArray(VAO);
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
        我们还要通过使用glUniform1i设置每个采样器的方式告诉OpenGL每个着色器采样器属于哪个纹理单元。我们只需要设置一次即可,所以这个会放在渲染循环的前面:
    ourShader.use(); // 别忘记在激活着色器前先设置uniform!
    glUniform1i(glGetUniformLocation(ourShader.ID, "texture1"), 0); // 手动设置
    ourShader.setInt("texture2", 1); // 或者使用着色器类设置
    
    while(...) 
    {
        [...]
    }
        注意一个常见的问题:OpenGL要求y轴0.0坐标是在图片的底部的,但是图片的y轴0.0坐标通常在顶部。因此你的图片可能是上下颠倒的。


    展开全文
  • 纹理映射(Texture Mapping)

    万次阅读 2019-05-17 10:27:59
    纹理映射技术,是一种将图形绘制(映射)到表面的技术,可以显著地增加所绘制场景的细节和真实感。 如: 纹理坐标 纹理实际上是一个二维数组,它的元素是一些颜色值。单个的颜色值被称为纹理元素或纹理像素。每...

    无论是在现实生活中还是在游戏虚拟世界中,将任何一个物体进行投影,然后进解析,都会发现它是由若干个多边形所构成,再将多边形进行分解,可以划分为若干个四边形和三角形,再将四边形进行分解,可以发现,四边形又可以划分为2个或以上的三角形构成。
    存在纹理贴图
    无纹理贴图
    因此就是采用这种方法,将图像数据映射到三角形单元中去。
    纹理映射技术,是一种将图形绘制(映射)到表面的技术,可以显著地增加所绘制场景的细节和真实感。
    如:
    这里写图片描述
    这里写图片描述


    • 纹理坐标
      纹理实际上是一个二维数组,它的元素是一些颜色值。单个的颜色值被称为纹理元素或纹理像素。每一个纹理像素在纹理中都有一个唯一的地址。这个地址可以被认为是一个列和行的值,它们分别由U和V来表示。纹理坐标位于纹理空间中。也就是说,它们和纹理中的(0,0)位置相对应。当我们将一个纹理应用于一个图元时,它的纹理像素地址必须要映射到对象坐标系中。然后再被平移到屏幕坐标系或像素位置上。
      纹理坐标是一对浮点值,用于访问纹理图像中的信息。在Direct3D中所使用的纹理坐标系由沿水平方向的x轴和沿垂直方向的y轴构成。

      要注意,为了能够处理不同尺度的纹理,Direct3D将纹理坐标做了规范化的处理,使其限定在区间[0,1]内。
      一般对于每个屏幕三角形单元,都可以在纹理中定义一个相应的三角形区域,然后将该三角形区域的纹理映射到屏幕三角形单元中。
      添加一个纹理坐标对以标识纹理中的顶点:
    struct Vertex
    {
      float _x,_y,_z;
      float _nx,_ny,_nz;
      float _u,_v;
      static const DWORD FVF;
      };
      const DWORD Vertex::FVF=D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1;
    

    值得注意的是:当为一个3D三角形指定相应的纹理三角形时,并不是马上就会进行纹理映射,是直到光栅化的时候,纹理映射才会进行。

    • 创建纹理:
      一般纹理的数据都是从磁盘中的图像文件读入,然后再加载到IDirect3DTexture9对象中;同样该图像文件可以在场景中的多个表面上共享使用。
      Direct3D支持的图像文件格式有:
      .jpg; .bmp; .tga; .png; .dds; .ppm; .dib; .hdr; .pfm;

         从文件中加载纹理并将其加载到内存中,使用D3DXCreateTextureFromFile()函数
      
    HRESULT D3DXCreateTextureFromFile(
    LPDIRECT3DDEVICE9 	pDevice,          //设备对象
    LPCTSTR			  	pSrcFile,         //所需加载的图像文件名
    LPDIRECT3DTEXTURE9 *ppTexture         //定义一个指针用来接收所创建的纹理
    );
    

    如果想让文件所加载的图像发挥更多的控制作用,可以使用D3DXCreateTextureFromFileEx()函数

    HRESULT D3DXCreateTextureFromFileEx(
    LPDIRECT3DDEVICE9 	pDevice,            //设备对象
    LPCTSTR 		  	pSrcFile,           //所需加载的图像文件名
    UINT			  	Width,             //图像宽度
    UINT			  	Height,             //图像高度
    UINT      		  	MipLevels,          //图片的图层,与图像质量有关
    DWORD			  	Usage,             //设定纹理的使用方法
    D3DFORMAT 		  	Format,            //每个颜色使用的位数(8,16,24,36)
    D3DPOOL			  	Pool,              //纹理对象驻留的内存类别
    DWORD			  	Filter,             //处理图像质量的方法
    DWORD     		  	MipFilter,          //像素过滤方式
    D3DCOLOR          	ColorKey,           //设置透明色
    D3DXIMAGE_INFO    	*pSrcInfo,          //记录载入图片信息
    PALETTEENTRY      	*pPalette,          //记录调色板信息
    LPDIRECT3DTEXTURE9	*ppTexture          //用来接收所创建的纹理
    ); 
    

    现在已经知道加载纹理的函数了,那怎么使用?
    比如现在要加载一个名为“hell.bmp”的图像文件创建纹理:
    1、创建设备对象和用来接收所创建纹理的指针

    LPDIRECT3DDEVICE9 Device;
    IDiretct3DTexture9 *_hell;
    D3DXCreateTextureFromFile(Device,
    "hell.bmp",         //如果不是放在当前项目下,就加上路径名
    &_hell);
    

    2、设置当前纹理,使用SetTexture()函数

    //SetTexture()的函数原型
    HRESULT SetTexture(
    DWORD Sampler,               	   //纹理要施加的采样器阶段,该值在[0,7]
    IDirect3DBaseTexture9 *pTexture    //Direct3D9纹理对象
    );
    
    Device->SetTexture(0,_hell);        
    
    • 纹理过滤器
      如前面所说(在纹理中定义一个三角形,然后将三角线区域的纹理映射到屏幕三角形单元中),理论上是这样,但实际上,纹理三角形与屏幕三角形的大小并不一致,当纹理三角形比屏幕三角形小时,为了适应屏幕三角形,只能将纹理三角形进行放大;当纹理三角形比屏幕三角形大时,为了适应屏幕三角形,也只能将纹理三角形进行缩小。放大/缩小的过程其实就是将图像的某些像素数据进行复制/舍弃。因此会使得有些时候图形会变得很畸形,为了防止这类情况Direct3D提供了一种技术——纹理过滤(Texture filtering).
      Direct3D提供了四种类型的纹理过滤方式。
      1、最近点采样(nearest point sampling):该方式处理的速度在3种类型里面是最快的,但效果也是最差的,内存开销小。
    LPDIRECT3DDEVICE9 Device;
    Device->SetSmaplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_POINT);//放大
    Device->SetSmaplerState(0,D3DSAMP_MINFILTER,D3DTEXF_POINT);//缩小
    
    2、线性纹理过滤(linear filtering):该方式可以产生较好的效果,而且速度也是蛮快的,内存开销比较适宜得当。
    
    Device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);//放大
    Device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);//缩小
    
    3、各向异性纹理过滤(anisotropic filtering):该方式可以产生最好的过滤效果,但处理速度却是最慢的,内存的开销也是最大的。再进行使用各向异性纹理过滤时,必须对D3DSAMP_MAXANISOTROPIC水平值进行设定,该值决定了各向异性过滤的质量水平,值越大,图像效果就越好。不过在使用前先使用GetDeviceCaps()函数进行检测下,看硬件能支持的数值是多少。
    
    Device->SetSmaplerState(0,D3DSAMP_MAXANISOTROPIC,3);//假设值为3
    Device->SetSmaplerState(0,D3DSAMP_MAGFILETER,D3DTEXF_ANISOTROPIC);//放大
    Device->SetSmaplerState(0,D3DSAMP_MINFILETER,D3DTEXF_ANISOTROPIC);//缩小
    
    4、多级渐进纹理(mipmap):由某一纹理的原式分辨率创建一系列逐渐减小(将像素分别缩小一半)的纹理图像,并且对每种分辨率下的纹理所采用的过滤方式进行定制,以便保留那些比较重要的细节。
    

    这里写图片描述

    Device->SetSamplerState(0,D3DSAMP_MIPFILTER,Filter);
    

    Fileter可以取以下值:

    • D3DTEXF_NONE: 禁用多级渐进纹理过滤。

    • D3DTEXF_POINT: 采用最近点采样(nearest point sampling)进行过滤。

    • D3DTEXF_LINEAR: 采用线性纹理(linear filtering)进行过滤。

    • 寻址模式
      上面说过纹理坐标必须限制在[0,1]范围内,如果超出那怎么办,Direct3D提供了四种用来处理纹理坐标值超出[0,1]区间的纹理映射模式。

    • 重复寻址模式(wrap address mode):

    这里写图片描述

    Device->SetSamplerState(0,D3DSAMP_ADDRESSU,D3DTADDRESS_WRAP);
    Device->SetSamplerState(0,D3DSAMP_ADDRESSV,D3DTADDRESS_WRAP);
    
    • 边界颜色寻址模式(boarder color address mode)

    这里写图片描述

    Device->SetSamplerState(0,D3DSAMP_ADDRESSU,D3DTADDRESS_BORDER);
    Device->SetSamplerState(0,D3DSAMP_ADDRESSV,D3DTADDRESS_BORDER);
    Device->SetSmaplerState(0,D3DSAMP_BORDERCOLOR,0x000000ff);
    
    • 钳位(calmp address mode):

    这里写图片描述

    Device->SetSmaplerState(0,D3DSAMP_ADDRESSU,D3DTADDRESS_CLAMP);
    Device->SetSmaplerState(0,D3DSAMP_ADDRESSV,D3DTADDRESS_CLAMP);
    
    • 镜像(mirror):

    这里写图片描述

    Device->SetSamplerState(0,D3DSAMP_ADDRESSU,D3DTADDRESS_MIRROR);
    Device->SetSamplerState(0,D3DSAMP_ADDRESSV,D3DTADDRESS_MIRROR);
    

    最后上传源代码(有点小问题,不过无伤大雅)

    源码链接

    展开全文
  • 纹理分析

    万次阅读 2019-03-21 09:50:04
    纹理分析是对图像灰度(浓淡)空间分布模式的提取和分析。纹理分析在遥感图像、X射线照片、细胞图像判读和处理方面有广泛的应用。关于纹理,还没有一个统一的数学模型。它起源于表征纺织品表面性质的纹理概念,可以...

    纹理分析是对图像灰度(浓淡)空间分布模式的提取和分析。纹理分析在遥感图像、X射线照片、细胞图像判读和处理方面有广泛的应用。关于纹理,还没有一个统一的数学模型。它起源于表征纺织品表面性质的纹理概念,可以用来描述任何物质组成成分的排列情况,例如医学上X 射线照片中的肺纹理、血管纹理、航天(或航空)地形照片中的岩性纹理等。图像处理中的视觉纹理通常理解为某种基本模式(色调基元)的重复排列。因此描述一种纹理包括确定组成纹理的色调基元和确定色调基元间的相互关系。纹理是一种区域特性,因此与区域的大小和形状有关。两种纹理模式之间的边界,可以通过观察纹理度量是否发生显著改变来确定。纹理是物体结构的反映,分析纹理可以得到图像中物体的重要信息,是图像分割特征抽取和分类识别的重要手段。对于空间域图像或变换域图像(见图像变换),可以用统计和结构两种方法进行纹理分析。
      统计纹理分析寻找刻划纹理的数字特征,用这些特征或同时结合其他非纹理特征对图像中的区域(而不是单个像素)进行分类。图像局部区域的自相关函数、灰度共生矩阵、灰度游程以及灰度分布的各种统计量,是常用的数字纹理特征。如灰度共生矩阵用灰度的空间分布表征纹理。由于粗纹理的灰度分布随距离的变化比细纹理缓慢得多,因此二者有完全不同的灰度共生矩阵。
      结构纹理分析研究组成纹理的基元和它们的排列规则。基元可以是一个像素的灰度、也可以是具有特定性质的连通的像素集合。基元的排列规则常用树文法来描述。

    英文名称  Texture Analysis;

    学术解释

      指通过一定的图像处理技术提取出纹理特征参数,从而获得纹理的定量或定性描述的处理过程.纹理分析方法按其性质而言,可分为两大类:统计分析方法和结构分析方法

    学术定义

      纹理是一种普遍存在的视觉现象,目前对于纹理的精确定义还未形成统一认识,多根据应用需要做出不同定义.

      定义1 按一定规则对元素(elements)或基元(primitives)进行排列所形成的重复模式.

      定义2 如果图像函数的一组局部属性是恒定的,或者是缓变的,或者是近似周期性的,则图象中的对应区域具有恒定的纹理.

    作用分析

      对这种表面纹理的研究称为纹理分析.它在计算机视觉领域有着重要的应用.

      在机械工程中对机械零件加工表面的这种凹凸不平性开展研究同样具有重要的实践意义。

    对图像灰度空间分布模式提取和分析

      纹理分析在遥感图像、 X射线照片、细胞图像判读和处理方面有广泛的应用。关于纹理,还没有一个统一的数学模型。它起源于表征纺织品表面性质的纹理概念,可以用来描述任何物质组成成分的排列情况,例如医学上X 射线照片中的肺纹理、血管纹理、航天(或航空)地形照片中的岩性纹理等。图像处理中的视觉纹理通常理解为某种基本模式(色调基元)的重复排列。因此描述一种纹理包括确定组成纹理的色调基元和确定色调基元间的相互关系。纹理是一种区域特性,因此与区域的大小和形状有关。两种纹理模式之间的边界,可以通过观察纹理度量是否发生显著改变来确定。纹理是物体结构的反映,分析纹理可以得到图像中物体的重要信息,是图像分割特征抽取和分类识别的重要手段。对于空间域图像或变换域图像(见图像变换),可以用

    统计和结构两种方法进行纹理分析

      统计纹理分析寻找刻划纹理的数字特征,用这些特征或同时结合其他非纹理特征对图像中的区域(而不是单个像素)进行分类。图像局部区域的自相关函数、灰度共生矩阵、灰度游程以及灰度分布的各种统计量,是常用的数字纹理特征。如灰度共生矩阵用灰度的空间分布表征纹理。由于粗纹理的灰度分布随距离的变化比细纹理缓慢得多,因此二者有完全不同的灰度共生矩阵。

      结构纹理分析研究组成纹理的基元和它们的排列规则。基元可以是一个像素的灰度、也可以是具有特定性质的连通的像素集合。基元的排列规则常用树文法来描述。

    纹理基元与影调

      一个纹理基元(不严格地说)是一个具有一定的不变特性的视觉基元。这些不变特性在给定区域内的不同位置上,以不同的变形和不同的方向重复出现。纹理基元最基本的不变特性之一是区域内象素的灰度分布,而影调也是表示灰度的明暗分布。

      因此,我们认为影调和纹理不是独立的概念:当在图象的一定面积区域中影调基元的变化很小时,这个区域的主导特性是影调。当在小面积区域中含大量不同的影调,这个区域占主导的特性是纹理。

     

    spatial gray level co-occurrence matrix 空间灰度共生矩阵(GLCM)
    spatial gray level dependence matrix 空间灰度相关矩阵
    spatial gray-level dependence matrices  空间灰度独立矩阵

    Texture

    纹理特征建立在子对象基础之上,这就意味着,必须有一个对象等级架构去使用他们,精确的分割是使用形状纹理特征的基础,子对象的分割要尽量有意义
    1.考虑子对象光谱特征的纹理
    2.考虑子对象形状特征的纹理
    3.基于灰度共生矩阵的纹理

    1.Layer Value Texture Based on Subobjects

    —【Mean of sub-objects: stddev】子对象均值标准差,对象分割的子对象更隔阂,则该特征更有意义;

    —【Avrg. mean diff. to neighbors of subobjects】通过一个对象内部子对象在某一个图层(k)上与邻域(d)对象的差异取平均来进行对比,反应该对象内部差异的平均值。

    2.Shape Texture Based on Subobjects

    —【Area of subobjects: mean】所包含子对象的平均面积;

    —【Area of subobjects: stddev.】所包含子对象的面积的标准差;

    —【Density of subobjects: mean 】子对象密度平均值(参考对象形状特征中的Density );

    —【Density of subobjects: stddev. 】子对象密度的标准差;

    —【Asymmetry of subobjects: mean 】子对象不对称性的平均值;

    —【Asymmetry of subobjects: stddev. 】子对象不对称性的标准差;

    —【Direction of subobjects: mean 】方向权重是相关子对象的的不对称性,越不对称,对主方向的影响越大,算法首先比较所有子对象主方向在90-180之间的做(direction-180),即顺是真旋转180度,然后计算等级距离d下的所有子对象的主方向(权重)均值;

    —【Direction of subobjects: stddev. 】子对象主方向的标准差。

    3.Texture After Haralick P.152

        灰度共生矩阵(http://blog.csdn.net/Redeom/archive/2008/04/17/2301823.aspx

         共生矩阵用两个位置的象素的联合概率密度来定义,它不仅反映亮度的分布特性,也反映具有同样亮度或接近亮度的象素之间的位置分布特性,是有关图象亮度变化的二阶统计特征。它是定义一组纹理特征的基础。
        一幅图象的灰度共生矩阵能反映出图象灰度关于方向、相邻间隔、变化幅度的综合信息,它是分析图象的局部模式和它们排列规则的基础。
        设f(x,y)为一幅二维数字图象,其大小为M×N,灰度级别为Ng,则满足一定空间关系的灰度共生矩阵为
    P(i,j)=#{(x1,y1),(x2,y2)∈M×N|f(x1,y1)=i,f(x2,y2)=j
       其中#(x)表示集合x中的元素个数,显然P为Ng×Ng的矩阵若(x1,y1)与(x2,y2)间距离为d,两者与坐标横轴的夹角为θ,则可以得到各种间距及角度的灰度共生矩阵P(i,j,d,θ)。

         共生矩阵的一个计算例子见下图,其中(a)为原始图像的灰度值,(b)为从左到右方向上的共生矩阵,θ=0,(c)为从左下到右上方向上的共生矩阵,θ=45,(d)为从下到上方向共生矩阵,θ=90,(e)为从右下到左上方向上的共生矩阵,θ=135,相邻间隔d=1。


         纹理特征提取的一种有效方法是以灰度级的空间相关矩阵即共生矩阵为基础的,因为图像中相距(Δx,Δy)的两个灰度像素同时出现的联合频率分布可以用灰度共生矩阵来表示。若将图像的灰度级定为N级,那么共生矩阵为N×N矩阵,可表示为M(Δx,Δy)(h,k),其中位于(h,k)的元素mhk的值表示一个灰度为h而另一个灰度为k的两个相距为(Δx,Δy)的像素对出现的次数。
         对
    粗纹理的区域,其灰度共生矩阵的mhk值较集中于主对角线附近。因为对于粗纹理,像素对趋于具有相同的灰度。而对于细纹理的区域,其灰度共生矩阵中的mhk值则散布在各处。
         为了能更直观地以共生矩阵描述纹理状况,从共生矩阵导出一些反映矩阵状况的参数,典型的有以下几种:
       (1)能量:是灰度共生矩阵元素值的平方和,所以也称能量,反映了图像灰度分布均匀程度和纹理粗细度。如果共生矩阵的所有值均相等,则ASM值小;相反,如果其中一些值大而其它值小,则ASM值大。当共生矩阵中元素集中分布时,此时ASM值大。ASM值大表明一种较均一和规则变化的纹理模式。
      
    (2)对比度:反映了图像的清晰度和纹理沟纹深浅的程度。纹理沟纹越深,其对比度越大,视觉效果越清晰;反之,对比度小,则沟纹浅,效果模糊。灰度差即对比度大的象素对越多,这个值越大。灰度公生矩阵中远离对角线的元素值越大,CON越大。
       (3)相关:它度量空间灰度共生矩阵元素在行或列方向上的相似程度,因此,相关值大小反映了图像中局部灰度相关性。当矩阵元素值均匀相等时,相关值就大;相反,如果矩阵像元值相差很大则相关值小。如果图像中有水平方向纹理,则水平方向矩阵的COR大于其余矩阵的COR值。
       (4)熵:是图像所具有的信息量的度量,纹理信息也属于图像的信息,是一个随机性的度量,当共生矩阵中所有元素有最大的随机性、空间共生矩阵中所有值几乎相等时,共生矩阵中元素分散分布时,熵较大。它表示了图像中纹理的非均匀程度或复杂程度。
       (5)逆差距:反映图像纹理的同质性,度量图像纹理局部变化的多少。其值大则说明图像纹理的不同区域间缺少变化,局部非常均匀。
            其它参数:中值<Mean>、协方差<Variance>、同质性/逆差距<Homogeneity>、反差 <Contrast>、差异性<Dissimilarity>、熵<Entropy>、二阶距< Angular Second Moment>、自相关<Correlation>

    参考文献:高分辨率卫星影像中阴影的自动提取与处理,许妙忠余志惠。

    http://apps.hi.baidu.com/share/detail/37069002

    共生矩阵用两个位置的象素的联合概率密度来定义,它不仅反映亮度的分布特性,也反映具有同样亮度或接近亮度的象素之间的位置分布特性,是有关图象亮度变化的二阶统计特征。它是定义一组纹理特征的基础。

    一幅图象的灰度共生矩阵能反映出图象灰度关于方向、相邻间隔、变化幅度的综合信息,它是分析图象的局部模式和它们排列规则的基础。

    设f(x,y)为一幅二维数字图象,其大小为M×N,灰度级别为Ng,则满足一定空间关系的灰度共生矩阵为

    P(i,j)=#{(x1,y1),(x2,y2)∈M×N|f(x1,y1)=i,f(x2,y2)=j}

    其中#(x)表示集合x中的元素个数,显然P为Ng×Ng的矩阵,若(x1,y1)与(x2,y2)间距离为d,两者与坐标横轴的夹角为θ,则可以得到各种间距及角度的灰度共生矩阵P(i,j,d,θ)。

    纹理特征提取的一种有效方法是以灰度级的空间相关矩阵即共生矩阵为基础的[7],因为图像中相距(Δx,Δy)的两个灰度像素同时出现的联合频率分布可以用灰度共生矩阵来表示。若将图像的灰度级定为N级,那么共生矩阵为N×N矩阵,可表示为M(Δx,Δy)(h,k),其中位于(h,k)的元素mhk的值表示一个灰度为h而另一个灰度为k的两个相距为(Δx,Δy)的像素对出现的次数。
      对粗纹理的区域,其灰度共生矩阵的mhk值较集中于主对角线附近。因为对于粗纹理,像素对趋于具有相同的灰度。而对于细纹理的区域,其灰度共生矩阵中的mhk值则散布在各处。

    为了能更直观地以共生矩阵描述纹理状况,从共生矩阵导出一些反映矩阵状况的参数,典型的有以下几种:

    (1)能量:是灰度共生矩阵元素值的平方和,所以也称能量,反映了图像灰度分布均匀程度和纹理粗细度。如果共生矩阵的所有值均相等,则ASM值小;相反,如果其中一些值大而其它值小,则ASM值大。当共生矩阵中元素集中分布时,此时ASM值大。ASM值大表明一种较均一和规则变化的纹理模式。

    (2)对比度:,其中。反映了图像的清晰度和纹理沟纹深浅的程度。纹理沟纹越深,其对比度越大,视觉效果越清晰;反之,对比度小,则沟纹浅,效果模糊。灰度差即对比度大的象素对越多,这个值越大。灰度公生矩阵中远离对角线的元素值越大,CON越大。

    (3)相关:它度量空间灰度共生矩阵元素在行或列方向上的相似程度,因此,相关值大小反映了图像中局部灰度相关性。当矩阵元素值均匀相等时,相关值就大;相反,如果矩阵像元值相差很大则相关值小。如果图像中有水平方向纹理,则水平方向矩阵的COR大于其余矩阵的COR值。

    (4)熵:是图像所具有的信息量的度量,纹理信息也属于图像的信息,是一个随机性的度量,当共生矩阵中所有元素有最大的随机性、空间共生矩阵中所有值几乎相等时,共生矩阵中元素分散分布时,熵较大。它表示了图像中纹理的非均匀程度或复杂程度。

    (5)逆差距:反映图像纹理的同质性,度量图像纹理局部变化的多少。其值大则说明图像纹理的不同区域间缺少变化,局部非常均匀。

    其它参数:

    中值<Mean>

    协方差<Variance>

    同质性/逆差距<Homogeneity>

    反差<Contrast>

    差异性<Dissimilarity>

    熵<Entropy>

    二阶距<Angular Second Moment>

    自相关<Correlation>

    当图像的局部有较小的方差时,则灰度值占有支配地位,当图像的局部有较大的方差时,则纹理占有支配地位。纹理是和局部灰度及其空间组织相联系的,纹理在识别感兴趣的目标和地区中有着非常重要的作用。

    灰度共生矩阵表示了灰度的空间依赖性,它表示了在一种纹理模式下的像素灰度的空间关系。它的弱点是没有完全抓住局部灰度的图形特点,因此对于较大的局部,此方法的效果不太理想。灰度共生矩阵为方阵,维数等于图像的灰度级。灰度共生矩阵中的元素(i,j)的值表示了在图像中其中一个像素的灰度值为i,另一个像素的灰度值为j,并且相邻距离为d,方向为A的这样两个像素出现的次数。在实际应用中A一般选择为0°、45°、90°、135°。一般来说灰度图像的灰度级为256,在计算由灰度共生矩阵推导出的纹理特征时,要求图像的灰度级远小于256,主要是因为矩阵维数较大而窗口的尺寸较小则灰度共生矩阵不能很好表示纹理,如要能够很好表示纹理则要求窗口尺寸较大,这样使计算量大大增加,而且当窗口尺寸较大时对于每类的边界区域误识率较大。所以在计算灰度共生矩阵之前需要对图像进行直方图规定化,以减小图像的灰度级,一般规定化后的图像的灰度级为8或16。由灰度共生矩阵能够导出许多纹理特征,本文计算了14种灰度共生矩阵特征,分别为纹理二阶距、纹理熵、纹理对比度、纹理均匀性、纹理相关、逆差分矩、最大概率、纹理方差、共生和均值、共生和方差、共生和熵、共生差均值、共生差方差、共生差熵。

    由灰度共生矩阵能够导出许多纹理特征,计算了14种灰度共生矩阵特征,分别为纹理二阶距、纹理熵、纹理对比度、纹理均匀性、纹理相关、逆差分矩、最大概率、纹理方差、共生和均值、共生和方差、共生和熵、共生差均值、共生差方差、共生差熵。

    目前,人们对遥感影像上的纹理特征的含义理解不尽相同,纹理有时被称为结构、影纹和纹形等。Pickett认为纹理为保持一定的特征重复性并且间隔规律可以任意安排的空间结构。HawKins认为[6]纹理具有三大标志:某种局部序列性不断重复、非随机排列和纹理区域内大致为均匀的统一体。LiWang和D. C. He认为[7],纹理是纹理基元组成的,纹理基元被认为是表现纹理特征的最小单元,是一个像元在

    其周围8个方向上的特征反应。纹理特征有时是明显的,以某种基本图形在某一地区有规律的周期性出现,例如:大面积森林覆盖地区的影像构成的纹理为斑点状,沙漠地区的影像构成的纹理为链状、新月状等;而有时纹理特征是不明显的、隐晦的,具有不稳定性。一般来说,前者纹理比较均一,后者纹理比较复杂[9]。

    纹理作为一种区域特征,是对于图像各像元之间空间分布的一种描述。由于纹理能充分利用图像信息,无论从理论上或常识出发它都可以成为描述与识别图像的重要依据,与其他图像特征相比,它能更好地兼顾图像宏观性质与细微结构两个方面,因此纹理成为目标识别需要提取的重要特征。提取纹理特征的方法很多,如基于局部统计特性的特征、基于随机场模型的特征、基于空间频率的特征、分形特征等,其中,应用最广泛的是基于灰值共生矩阵的特征[10]。

    Matlab实现:

    % 图像检索——纹理特征
    %基于共生矩阵纹理特征提取,d=1,θ=0°,45°,90°,135°共四个矩阵
    %所用图像灰度级均为256
    %参考《基于颜色空间和纹理特征的图像检索》
    %function : T=Texture(Image)
    %Image : 输入图像数据
    %T : 返回八维纹理特征行向量
    %**************************************************************************
    function T = Texture(path)
    Image = imread(path);
    
    % [M,N,O] = size(Image);
    M = 256;
    N = 256;
    if isrgb(Image)%判断是否是RGB
    Gray=rgb2gray(Image);
    end
    %————————————————————————–
    %1.将各颜色分量转化为灰度
    %————————————————————————–
    %Gray = double(0.3*Image(:,:,1)+0.59*Image(:,:,2)+0.11*Image(:,:,3))
    
    %————————————————————————–
    %2.为了减少计算量,对原始图像灰度级压缩,将Gray量化成16级
    %————————————————————————–
    for i = 1:M
    for j = 1:N
    for n = 1:256/16
    if (n-1)*16<=Gray(i,j)&Gray(i,j)<=(n-1)*16+15
    Gray(i,j) = n-1;
    end
    end
    end
    end
    
    %--------------------------------------------------------------------------
    %3.计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135
    %--------------------------------------------------------------------------
    P = zeros(16,16,4);
    for m = 1:16
    for n = 1:16
    for i = 1:M
    for j = 1:N
    if j P(m,n,1) = P(m,n,1)+1;
    P(n,m,1) = P(m,n,1);
    end
    if i>1&j P(m,n,2) = P(m,n,2)+1;
    P(n,m,2) = P(m,n,2);
    end
    if i P(m,n,3) = P(m,n,3)+1;
    P(n,m,3) = P(m,n,3);
    end
    if i P(m,n,4) = P(m,n,4)+1;
    P(n,m,4) = P(m,n,4);
    end
    end
    end
    if m==n
    P(m,n,:) = P(m,n,:)*2;
    end
    end
    end
    
    %%---------------------------------------------------------
    % 对共生矩阵归一化
    %%---------------------------------------------------------
    for n = 1:4
    P(:,:,n) = P(:,:,n)/sum(sum(P(:,:,n)));
    end
    
    %--------------------------------------------------------------------------
    %4.对共生矩阵计算能量、熵、惯性矩、相关4个纹理参数
    %--------------------------------------------------------------------------
    H = zeros(1,4);
    I = H;
    Ux = H; Uy = H;
    deltaX= H; deltaY = H;
    C =H;
    for n = 1:4
    E(n) = sum(sum(P(:,:,n).^2)); %%能量
    for i = 1:16
    for j = 1:16
    if P(i,j,n)~=0
    H(n) = -P(i,j,n)*log(P(i,j,n))+H(n); %%熵
    end
    I(n) = (i-j)^2*P(i,j,n)+I(n); %%惯性矩
    
    Ux(n) = i*P(i,j,n)+Ux(n); %相关性中μx
    Uy(n) = j*P(i,j,n)+Uy(n); %相关性中μy
    end
    end
    end
    for n = 1:4
    for i = 1:16
    for j = 1:16
    deltaX(n) = (i-Ux(n))^2*P(i,j,n)+deltaX(n); %相关性中σx
    deltaY(n) = (j-Uy(n))^2*P(i,j,n)+deltaY(n); %相关性中σy
    C(n) = i*j*P(i,j,n)+C(n);
    end
    end
    C(n) = (C(n)-Ux(n)*Uy(n))/deltaX(n)/deltaY(n); %相关性
    end
    
    %--------------------------------------------------------------------------
    %求能量、熵、惯性矩、相关的均值和标准差作为最终8维纹理特征
    %--------------------------------------------------------------------------
    T(1) = mean(E); T(2) = sqrt(cov(E));
    T(3) = mean(H); T(4) = sqrt(cov(H));
    T(5) = mean(I); T(6) = sqrt(cov(I));
    T(7) = mean(C); T(8) = sqrt(cov(C));

    在计算灰度共生矩阵前,需要做影像的量化比如将256级影像量化为128级。有一种方法是线性量化,但是这种方法有可能对原始影像的纹理产生人为地影响,太“粗了”。所以想请教大家是否还有其他较好的影像灰度级量化的方法?

    http://blog.csdn.net/linxue968/article/details/6034745

    图像的灰度共生矩阵GLCM(matlab 函数帮助)

    Gray-level co-occurrence matrix from an image

    图像的灰度共生矩阵

    灰度共生矩阵是像素距离和角度的矩阵函数,它通过计算图像中一定距离和一定方向的两点灰度之间的相关性,来反映图像在方向、间隔、变化幅度及快慢上的综合信息。

    使用方法:
    glcm = graycomatrix(I)
    glcms = graycomatrix(I,param1,val1,param2,val2,...)
    [glcms,SI] = graycomatrix(...)

    描述:
    glcms = graycomatrix(I) 产生图像I的灰度共生矩阵GLCM。它是通过计算两灰度值在图像I中水平相邻的次数而得到的 (也不必是水平相邻的次数,这一参数是可调的,可能通过Offsets来进行调整,比如[0 D]代表是水平方向,[-D D]代表是右上角45度方向,[-D 0]代表是竖直方向,即90度方向,而[-D -D]则代表是左上角,即135度方向),GLCM中的每一个元素(i,j)代表灰度i与灰度j在图像中水平相邻的次数。

    因为动态地求取图像的GLCM区间代价过高,我们便首先将灰度值转换到I的灰度区间里。如果I是一个二值图像,那么灰度共生矩阵就将图像转换到两级。如果I是一个灰度图像,那将转换到8级。灰度的级数决定了GLCM的大小尺寸。你可以通过设定参数“NumLevels”来指定灰度的级数,还可以通过设置“GrayLimits"参数来设置灰度共生矩阵的转换方式。

    下图显示了如何求解灰度共生矩阵,以(1,1)点为例,GLCM(1,1)值为1说明只有一对灰度为1的像素水平相邻。GLCM(1,2)值为2,是因为有两对灰度为1和2的像素水平相邻。

    glcms = graycomatrix(I,param1,val1,param2,val2,...) 返回一个或多个灰度灰度共生矩阵,根据指定的参数。参数可以很简短,并且对大小写不敏感。

    参数

    'GrayLimits'  是两个元素的向量,表示图像中的灰度映射的范围,如果其设为[],灰度共生矩阵将使用图像I的最小及最大灰度值作为GrayLimits

    'NumLevels'    一个整数,代表是将图像中的灰度归一范围。举例来说,如果NumLevels为8,意思就是将图像I的灰度映射到1到8之间,它也决定了灰度共生矩阵的大小

    'Offset'   上面有解释,是一个p*2的整数矩阵,D代表是当前像素与邻居的距离,通过设置D值,即可设置角度
    Angle        Offset
      0              [0 D]
     45             [-D D]
     90             [-D 0]
    135            [-D -D]

    示例:

    计算灰度共生矩阵,并且返回缩放后的图像,SI
    I = [ 1 1 5 6 8 8; 2 3 5 7 0 2; 0 2 3 5 6 7];
    [glcm,SI] = graycomatrix(I,'NumLevels',9,'G',[])

    计算灰度图像的灰度共生矩阵
    I = imread('circuit.tif');
    glcm = graycomatrix(I,'Offset',[2 0]);

    灰度共生矩阵的特征:

    角二阶矩(Angular Second Moment, ASM)
    ASM=sum(p(i,j).^2)    p(i,j)指归一后的灰度共生矩阵
    角二阶矩是图像灰度分布均匀程度和纹理粗细的一个度量,当图像纹理绞细致、灰度分布均匀时,能量值较大,反之,较小。

    熵(Entropy, ENT)
    ENT=sum(p(i,j)*(-ln(p(i,j)))   
    是描述图像具有的信息量的度量,表明图像的复杂程序,当复杂程序高时,熵值较大,反之则较小。

    反差分矩阵(Inverse Differential Moment, IDM)
    IDM=sum(p(i,j)/(1+(i-j)^2))
    反映了纹理的清晰程度和规则程度,纹理清晰、规律性较强、易于描述的,值较大;杂乱无章的,难于描述的,值较小

    灰度共生矩阵就是一种通过研究灰度的空间相关特性来描述纹理的常用方法。

    灰度共生矩阵是对图像上保持某距离的两象素分别具有某灰度的状况进行统计得到的。

    取图像(N×N)中任意一点(x,y)及偏离它的另一点(x+a,y+b),设该点对的灰度值为(g1,g2)。令点(x,y)在整个画面上移动,则会得到各种(g1,g2)。值,设灰度值的级数为,则(g1,g2)。的组合共有 k2种。对于整个画面,统计出每一种(g1,g2)值出现的次数,然后排列成一个方阵,在用(g1,g2)出现的总次数将它们归一化为出现的概率P(g1,g2),这样的方阵称为灰度共生矩阵。距离差分值(a,b)取不同的数值组合,可以得到不同情况下的联合概率矩阵。(a,b)取值要根据纹理周期分布的特性来选择,对于较细的纹理,选取(1,0)、(1,1)、(2,0)等小的差分值。

     

      为了能更直观地以共生矩阵描述纹理状况,从共生矩阵导出一些反映矩阵状况的参数,典型的有以下几种:

      (1)能量:是灰度共生矩阵元素值的平方和,所以也称能量,反映了图像灰度分布均匀程度和纹理粗细度。如果共生矩阵的所有值均相等,则ASM值小;相反,如果其中一些值大而其它值小,则ASM值大。当共生矩阵中元素集中分布时,此时ASM值大。ASM值大表明一种较均一和规则变化的纹理模式。

      (2)对比度:反映了图像的清晰度和纹理沟纹深浅的程度。纹理沟纹越深,其对比度越大,视觉效果越清晰;反之,对比度小,则沟纹浅,效果模糊。灰度差即对比度大的象素对越多,这个值越大。灰度公生矩阵中远离对角线的元素值越大,CON越大。

      (3)相关:它度量空间灰度共生矩阵元素在行或列方向上的相似程度,因此,相关值大小反映了图像中局部灰度相关性。当矩阵元素值均匀相等时,相关值就大;相反,如果矩阵像元值相差很大则相关值小。如果图像中有水平方向纹理,则水平方向矩阵的COR大于其余矩阵的COR值。

      (4)熵:是图像所具有的信息量的度量,纹理信息也属于图像的信息,是一个随机性的度量,当共生矩阵中所有元素有最大的随机性、空间共生矩阵中所有值几乎相等时,共生矩阵中元素分散分布时,熵较大。它表示了图像中纹理的非均匀程度或复杂程度。

      (5)逆差距:反映图像纹理的同质性,度量图像纹理局部变化的多少。其值大则说明图像纹理的不同区域间缺少变化,局部非常均匀。

           其它参数:中值<Mean>、协方差<Variance>、同质性/逆差距<Homogeneity>、反差<Contrast>、差异性<Dissimilarity>、熵<Entropy>、二阶距< Angular Second Moment>、自相关<Correlation>

    image=imread('4.bmp');
            %计算图像的灰度共生矩阵
    [glcms,SI]=graycomatrix(image);
            %计算图像的灰度共生矩阵
    stats = graycoprops(glcms,'Contrast Correlation energy')
    %灰度共生矩阵纹理特征提取
    %提取了三个特征参数。f1为角二阶矩,f2为相关度,f3为熵
    clc
    clear
    tu=imread('nvxing19.jpg');
    IN=rgb2gray(tu);              %灰度化
    g=256;
    [R,C]=size(IN);
    p1=zeros(g);             %计算共生矩阵
    for M=1:R
        for N=1:(C-1)
            p1(IN(M,N)+1,IN(M,N+1)+1)= p1(IN(M,N)+1,IN(M,N+1)+1)+1;
            p1(IN(M,N+1)+1,IN(M,N)+1)= p1(IN(M,N+1)+1,IN(M,N)+1)+1;
        end
    end
    p2=double(p1)/(M*N);             %归一化
    
    %计算角二阶矩 f1
    f1=p2.^2;
    f1=sum(f1(:))
    
    % 计算相关度 f2
    colour=0:(g-1);
    m1=sum(p2)*colour(:);
    m2=m1;
    pp=sum(p2);
    v1=((colour-m1).^2)*pp(:);
     v2=v1;
    [m,n]=meshgrid(colour,colour);
    pp=m.*n.*p2;
    f2=(sum(pp(:))-m1*m2)/(v1+eps)*(v2+eps)
    
    %计算墒 f3
    pp=(p2.*log2(p2+eps));
    f3=-sum(pp(:));
    
    %计算对比度 f4
    f4=0;
    k_f4=0;
    
    for k=1:g-1
        for i=1:g-1
            if(i+k)<=g
                k_f4=k_f4+2*p2(i,i+k);
            end
        end
        f4=f4+k_f4*k^2;
    end
    
    %计算逆矩阵 f5
    f5=0;
    for k=1:g
        for j=1:g
            f5=f5+p2(k,j)/(1+(j-k)^2);
        end
    end

    Matlab中实现灰度共生矩阵

    %                   图像检索——纹理特征
    %基于共生矩阵纹理特征提取,d=1,θ=0°,45°,90°,135°共四个矩阵
    %所用图像灰度级均为256
    %参考《基于颜色空间和纹理特征的图像检索》
    %function : T=Texture(Image)
    %Image    : 输入图像数据
    %T        : 返回八维纹理特征行向量
    %**************************************************************************
    % function T = Texture(Image)
    Gray = imread('d:\result5.bmp');
    [M,N,O] = size(Gray);
    M = 128;
    N = 128;
    
    %--------------------------------------------------------------------------
    %1.将各颜色分量转化为灰度
    %--------------------------------------------------------------------------
    % Gray = double(0.3*Image(:,:,1)+0.59*Image(:,:,2)+0.11*Image(:,:,3));
    
    %--------------------------------------------------------------------------
    %2.为了减少计算量,对原始图像灰度级压缩,将Gray量化成16级
    %--------------------------------------------------------------------------
    for i = 1:M
        for j = 1:N
            for n = 1:256/16
                if (n-1)*16<=Gray(i,j)&Gray(i,j)<=(n-1)*16+15
                    Gray(i,j) = n-1;
                end
            end
        end
    end
    
    %--------------------------------------------------------------------------
    %3.计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135
    %--------------------------------------------------------------------------
    P = zeros(16,16,4);
    for m = 1:16
        for n = 1:16
            for i = 1:M
                for j = 1:N
                    if j<N&Gray(i,j)==m-1&Gray(i,j+1)==n-1
                        P(m,n,1) = P(m,n,1)+1;
                        P(n,m,1) = P(m,n,1);
                    end
                    if i>1&j<N&Gray(i,j)==m-1&Gray(i-1,j+1)==n-1
                        P(m,n,2) = P(m,n,2)+1;
                        P(n,m,2) = P(m,n,2);
                    end
                    if i<M&Gray(i,j)==m-1&Gray(i+1,j)==n-1
                        P(m,n,3) = P(m,n,3)+1;
                        P(n,m,3) = P(m,n,3);
                    end
                    if i<M&j<N&Gray(i,j)==m-1&Gray(i+1,j+1)==n-1
                        P(m,n,4) = P(m,n,4)+1;
                        P(n,m,4) = P(m,n,4);
                    end
                end
            end
            if m==n
                P(m,n,:) = P(m,n,:)*2;
            end
        end
    end
    
    %%---------------------------------------------------------
    % 对共生矩阵归一化
    %%---------------------------------------------------------
    for n = 1:4
        P(:,:,n) = P(:,:,n)/sum(sum(P(:,:,n)));
    end
    
    %--------------------------------------------------------------------------
    %4.对共生矩阵计算能量、熵、惯性矩、相关4个纹理参数
    %--------------------------------------------------------------------------
    H = zeros(1,4);
    I = H;
    Ux = H;      Uy = H;
    deltaX= H;  deltaY = H;
    C =H;
    for n = 1:4
        E(n) = sum(sum(P(:,:,n).^2)); %%能量
        for i = 1:16
            for j = 1:16
                if P(i,j,n)~=0
                    H(n) = -P(i,j,n)*log(P(i,j,n))+H(n); %%熵
                end
                I(n) = (i-j)^2*P(i,j,n)+I(n);  %%惯性矩
              
                Ux(n) = i*P(i,j,n)+Ux(n); %相关性中μx
                Uy(n) = j*P(i,j,n)+Uy(n); %相关性中μy
            end
        end
    end
    for n = 1:4
        for i = 1:16
            for j = 1:16
                deltaX(n) = (i-Ux(n))^2*P(i,j,n)+deltaX(n); %相关性中σx
                deltaY(n) = (j-Uy(n))^2*P(i,j,n)+deltaY(n); %相关性中σy
                C(n) = i*j*P(i,j,n)+C(n);            
            end
        end
        C(n) = (C(n)-Ux(n)*Uy(n))/deltaX(n)/deltaY(n); %相关性  
    end
    
    %--------------------------------------------------------------------------
    %求能量、熵、惯性矩、相关的均值和标准差作为最终8维纹理特征
    %--------------------------------------------------------------------------
    a1 = mean(E)  
    b1 = sqrt(cov(E))
    
    a2 = mean(H)
    b2 = sqrt(cov(H))
    
    a3 = mean(I) 
    b3 = sqrt(cov(I))
    
    a4 = mean(C)
    b4 = sqrt(cov(C))
    
    sprintf('0,45,90,135方向上的能量依次为: %f, %f, %f, %f',E(1),E(2),E(3),E(4))  % 输出数据;
    sprintf('0,45,90,135方向上的熵依次为: %f, %f, %f, %f',H(1),H(2),H(3),H(4))  % 输出数据;
    sprintf('0,45,90,135方向上的惯性矩依次为: %f, %f, %f, %f',I(1),I(2),I(3),I(4))  % 输出数据;
    sprintf('0,45,90,135方向上的相关性依次为: %f, %f, %f, %f',C(1),C(2),C(3),C(4))  % 输出数据;

    灰度共生矩阵只是描述纹理的一种方法,其本身是不能作为特征的.
    特别是灰度等级大的时候.
    但是灰度共生矩阵的能量\相关等二次特征可以表征图像的一些特性.
    问题一:接下来然后怎么办?
      接下来转化为其它的特征作为输入.
    问题二:一副图像的纹理特征提取出来的矩阵和原来矩阵的维数是相同的还是不同的?
      一般不是相同的,一般要小,特征嘛,要不然不需要降维,直接让原图像作为原始特征.

    一般是需要降维的,matlab中灰度共生矩阵函数中有降维的操作吗,还是需要自己写进去这些代码才会有降维发生?
    非你有降维的操作,不然肯定是相同的!你若是理解了共生矩阵怎么得来的也就完全明白了~~

    Gray-level co-occurrence matrix from an image

    图像的灰度共生矩阵

    灰度共生矩阵是像素距离和角度的矩阵函数,它通过计算图像中一定距离和一定方向的两点灰度之间的相关性,来反映图像在方向、间隔、变化幅度及快慢上的综合信息。

    使用方法:
    glcm = graycomatrix(I)
    glcms = graycomatrix(I,param1,val1,param2,val2,...)
    [glcms,SI] = graycomatrix(...)

    描述:
    glcms = graycomatrix(I) 产生图像I的灰度共生矩阵GLCM。它是通过计算两灰度值在图像I中水平相邻的次数而得到的 (也不必是水平相邻的次数,这一参数是可调的,可能通过Offsets来进行调整,比如[0 D]代表是水平方向,[-D D]代表是右上角45度方向,[-D 0]代表是竖直方向,即90度方向,而[-D -D]则代表是左上角,即135度方向),GLCM中的每一个元素(i,j)代表灰度i与灰度j在图像中水平相邻的次数。

    因为动态地求取图像的GLCM区间代价过高,我们便首先将灰度值转换到I的灰度区间里。如果I是一个二值图像,那么灰度共生矩阵就将图像转换到两级。如果I是一个灰度图像,那将转换到8级。灰度的级数决定了GLCM的大小尺寸。你可以通过设定参数“NumLevels”来指定灰度的级数,还可以通过设置“GrayLimits"参数来设置灰度共生矩阵的转换方式。

    下图显示了如何求解灰度共生矩阵,以(1,1)点为例,GLCM(1,1)值为1说明只有一对灰度为1的像素水平相邻。GLCM(1,2)值为2,是因为有两对灰度为1和2的像素水平相邻。

     

    glcms = graycomatrix(I,param1,val1,param2,val2,...) 返回一个或多个灰度灰度共生矩阵,根据指定的参数。参数可以很简短,并且对大小写不敏感。

    参数

    'GrayLimits'  是两个元素的向量,表示图像中的灰度映射的范围,如果其设为[],灰度共生矩阵将使用图像I的最小及最大灰度值作为GrayLimits

    'NumLevels'    一个整数,代表是将图像中的灰度归一范围。举例来说,如果NumLevels为8,意思就是将图像I的灰度映射到1到8之间,它也决定了灰度共生矩阵的大小

    'Offset'   上面有解释,是一个p*2的整数矩阵,D代表是当前像素与邻居的距离,通过设置D值,即可设置角度
    Angle        Offset
      0              [0 D]
     45             [-D D]
     90             [-D 0]
    135            [-D -D]

    示例:

    计算灰度共生矩阵,并且返回缩放后的图像,SI
    I = [ 1 1 5 6 8 8; 2 3 5 7 0 2; 0 2 3 5 6 7];
    [glcm,SI] = graycomatrix(I,'NumLevels',9,'G',[])

    计算灰度图像的灰度共生矩阵
    I = imread('circuit.tif');
    glcm = graycomatrix(I,'Offset',[2 0]);

    灰度共生矩阵的特征:

    角二阶矩(Angular Second Moment, ASM)
    ASM=sum(p(i,j).^2)    p(i,j)指归一后的灰度共生矩阵
    角二阶矩是图像灰度分布均匀程度和纹理粗细的一个度量,当图像纹理绞细致、灰度分布均匀时,能量值较大,反之,较小。

    熵(Entropy, ENT)
    ENT=sum(p(i,j)*(-ln(p(i,j)))    
    是描述图像具有的信息量的度量,表明图像的复杂程序,当复杂程序高时,熵值较大,反之则较小。

    反差分矩阵(Inverse Differential Moment, IDM)
    IDM=sum(p(i,j)/(1+(i-j)^2))
    反映了纹理的清晰程度和规则程度,纹理清晰、规律性较强、易于描述的,值较大;杂乱无章的,难于描述的,值较小。

    http://blog.csdn.net/weiyuweizhi/article/details/5724050

    http://apps.hi.baidu.com/share/detail/19780877

    灰度-梯度共生矩阵纹理特征分析既可用灰度本身的信息,又可用灰度变化的梯度信息。灰度-梯度共生矩阵纹理分析方法是用灰度和梯度的综合信息提取纹理特征,它考虑像素灰度与边缘梯度的联合统计分布。利用灰度-梯度共生矩阵我们计算了小梯度优势、大梯度优势、灰度分布不均匀性、梯度分布不均匀性、能量、灰度平均、梯度平均、灰度方差、梯度方差、相关、梯度熵,灰度熵、混合熵、惯性、以及逆矩差等十五个纹理特征量参数说明: GrayNumLevels 灰度级参数 GradsNumLevels 梯度级参数 Method='sobel' 梯度算子提取特征如下: SmallGradsDominance 小梯度优势 BigGradsDominance 大梯度优势 GrayAsymmetry 灰度分布不均匀性 GradsAsymmetry 梯度分布不均匀性 Energy 能量 GrayMean 灰度平均 GradsMean 梯度平均 GrayVariance 灰度方差 GradsVariance 梯度方差 Correlation 相关 GrayEntropy 灰度熵 GradsEntropy 梯度熵 Entropy 混合熵 Inertia 惯性 DifferMo

     

    灰度共生矩阵法,顾名思义,就是通过计算灰度图像得到它的共生矩阵,然后透过计算这个共生矩阵得到矩阵的部分特征值,来分别代表图像的某些纹理特征(纹理的定义仍是难点)。灰度共生矩阵能反映图像灰度关于方向、相邻间隔、变化幅度的综合信息,它是分析图像的局部模式和它们排列规则的基础。

    对于灰度共生矩阵的理解,需要明确几个概念:方向,偏移量和灰度共生矩阵的阶数。

    1、 方向

    一般计算过程会分别选在几个不同的方向来进行,常规的是0°、45°、90°、135°,理论上的所有方向计算方法不可取。

    定义如下:

    水平方向为0°垂直的90°,以及45°和135°(大致如上图所画)

    2、偏移量(offset:下面例子中,取值为1来帮助理解)

    3、灰度共生矩阵的阶数和灰度图像的灰度值的阶数是一致的,即当灰度图像的灰度值的阶数是N时,灰度共生矩阵为N*N的矩阵。

     

    0

    0

    0

    1

    2

    0

    0

    1

    1

    2

    0

    1

    1

    1

    1

    1

    1

    2

    2

    1

    1

    2

    2

    1

    0

    假定offset为1,取0°方向求共生矩阵时:

    最初取点(1,1)和(1,2),此时在频度矩阵的(0,0)处加1((1,1)点的灰度值为0,(1,2)点的灰度也为0);

    然后取(1,2)和(1,3)点,此时也在频度矩阵的(0,0)处加1;

    接着取到(1,3)和(1,4)点,此时也在频度矩阵的(0,0)处加1;

    接着取到(1,4)和(1,5)点,此时在频度矩阵的(1,0)处加1((1,5)点的灰度值为1,(1,4)点的灰度为0)。

    直到每一行都取遍即可。

    假定offset为1,取45°方向求共生矩阵时:

    最初取点(1,1)和(2,2),此时在45°方向频度矩阵的(0,0)处加1((1,1)点的灰度值为0,(2,2)点的灰度也为0);

    然后取(1,2)和(2,3)点,此时在45°方向频度矩阵的(0,1)处加1;

    接着取到(1,3)和(2,4)点,此时也在45°方向频度矩阵的(0,1)处加1;

    接着取到(1,4)和(2,5)点,此时在45°方向频度矩阵的(1,2)处加1((1,4)点的灰度值为1,(2,5)点的灰度为2)。

    然后下一行,直到每一行合适的值都取遍即可。

    另两个方向的情况相似。

    最后得到如下四个频度矩阵

    10

    0

    1

    2

    0

    3

    3

    0

    1

    1

    5

    4

    2

    0

    2

    2

    11

    0

    1

    2

    0

    1

    5

    0

    1

    0

    3

    5

    2

    1

    1

    0

     

     

     

     

     

     

    0°方向频度矩阵                 45°方向频度矩阵

                                            

    10

    0

    1

    2

    0

    3

    3

    0

    1

    1

    6

    3

    2

    0

    2

    2

    10

    0

    1

    2

    0

    3

    0

    0

    1

    0

    7

    2

    2

    0

    2

    2

     

     

     

     

     

    90°方向频度矩阵               135°方向频度矩阵

     

    在用matlab编程时由于matlab的矩阵的下脚标是从1开始的所以矩阵的形式类似于下面的形式:

    p(I(i,j)+1,I(i,j+1)+1)= p(I(i,j)+1,I(i,j+1)+1)+1;这是0°方向的计算式

    这里,灰度阶数即从最低的0变成最低为1

    四个方向的计算式,大致如下:

    p1(IN(M,N)+1,IN(M,N+1)+1)= p1(IN(M,N)+1,IN(M,N+1)+1)+1;%是共生矩阵0度的计算式

    p1(IN(M,N)+1,IN(M-1,N+1)+1)= p1(IN(M,N)+1,IN(M-1,N+1)+1)+1;%是45度的计算式

    p1(IN(M,N)+1,IN(M-1,N)+1)= p1(IN(M,N)+1,IN(M-1,N)+1)+1;%是共生矩阵90度的计算式

    p1(IN(M,N)+1,IN(M-1,N-1)+1)= p1(IN(M,N)+1,IN(M-1,N-1)+1)+1;%是135度的计算式

    现在各个方向统计完毕,然后将频度矩阵/总频次即得共生矩阵

    这时候得到四个共生矩阵,其编程实现,可参见如下代码:

    %2.为了减少计算量,对原始图像灰度级压缩,将Gray量化成16级
    
    %--------------------------------------------------------------------------
    
    fori = 1:M
    
       for j = 1:N
    
           for n = 1:256/16
    
               if (n-1)*16<=Gray(i,j)&Gray(i,j)<=(n-1)*16+15
    
                    Gray(i,j) = n-1;
    
               end
    
           end
    
       end
    
    end
    
     
    
    %--------------------------------------------------------------------------
    
    %3.计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135
    
    %--------------------------------------------------------------------------
    
    P = zeros(16,16,4);
    
    form = 1:16
    
       for n = 1:16
    
           for i = 1:M
    
               for j = 1:N
    
                   if j<N&Gray(i,j)==m-1&Gray(i,j+1)==n-1
    
                        P(m,n,1) = P(m,n,1)+1;
    
                        P(n,m,1) = P(m,n,1);
    
                   end
    
                   if i>1&j<N&Gray(i,j)==m-1&Gray(i-1,j+1)==n-1
    
                        P(m,n,2) = P(m,n,2)+1;
    
                        P(n,m,2) = P(m,n,2);
    
                   end
    
                   if i<M&Gray(i,j)==m-1&Gray(i+1,j)==n-1
    
                        P(m,n,3) = P(m,n,3)+1;
    
                        P(n,m,3) = P(m,n,3);
    
                   end
    
                   if i<M&j<N&Gray(i,j)==m-1&Gray(i+1,j+1)==n-1
    
                        P(m,n,4) = P(m,n,4)+1;
    
                        P(n,m,4) = P(m,n,4);
    
                   end
    
               end
    
           end
    
           if m==n
    
               P(m,n,:) = P(m,n,:)*2;
    
           end
    
       end
    
    end
    
    %%---------------------------------------------------------
    
    %对共生矩阵归一化
    
    %%---------------------------------------------------------
    
    forn = 1:4
    
        P(:,:,n) = P(:,:,n)/sum(sum(P(:,:,n)));
    
    end

    http://archive.cnblogs.com/a/2115266/

    展开全文
  • 1000张纹理大全

    2020-06-12 23:30:09
    1000份的纹理大全,找纹理再不愁,多年资源贡献大家了。
  • 纹理特征

    千次阅读 2018-10-11 19:59:29
    1.纹理的定义  纹理是一种反映图像中的同质的一种视觉特征,它体现了物体表面的结构组织排列属性。纹理特征具有三大标志:某种局部序列性不断重复、非随机排列、纹理区域内大致为均匀的统一体。纹理不同于灰度、...
  • 图像纹理特征总体简述

    万次阅读 多人点赞 2017-05-09 17:33:49
    图像纹理特征总体简述
  • OpenGL中纹理贴图总结

    千次阅读 2009-07-03 15:01:00
    OpenGL提供了强大的纹理贴图支持OpengGL1.1版本引入以下的几个纹理特性:增加了一些内部纹理图像格式。纹理代理。用于查询是否有足够的资源以容纳一幅特定的纹理图像。纹理子图像。用于替换原有纹理图像的部分或者...
  • 关于纹理坐标

    万次阅读 2010-07-06 00:18:00
    穷人吧 纹理 本文译自微软DirectX 6.1帮助文件,英文版权属MicroSoft™公司所有,中文版权(如果有的话:-))属程连冀、刘长松所有。 Direct3D支持广泛的纹理特性设置,使程序员可以轻松的访问提供高级纹理技术。...
  • 图像特征提取(纹理特征)

    万次阅读 2018-07-26 20:32:08
    图像纹理特征总体简述 纹理是一种反映图像中同质现象的视觉特征,它体现了物体表面的具有缓慢变化或者周期性变化的表面结构组织排列属性 纹理具有三大标志: 某种局部序列性不断重复 非随机排列 纹理区域内大致...
  • 图像的纹理特征

    万次阅读 2018-06-19 08:51:38
    纹理特征 纹理特征刻画了图像中重复出现的局部模式与他们的排列规则,常用于图像分类和场景识别。其只能反映物体表面的特性,无法完全反映出物体的本质属性,所以仅仅利用纹理特征无法获得图像的高层次内容。 优点...
  • Tamura纹理特征

    万次阅读 2007-08-03 14:38:00
    基于人类对纹理的视觉感知的心理学的研究,Tamura等人提出了纹理特征的表达[14]。Tamura纹理特征的六个分量对应于心理学角度上纹理特征的六种属性,分别是粗糙度(coarseness)、对比度(contrast)、方向度...
  • 图像纹理特征提取

    万次阅读 2018-06-07 17:18:31
    amp;fps=1为了将图像处理中的理论知识运用到通信理论中,所以学习了图像特征提取的部分内容。...纹理特征(一)特点 纹理特征也是一种全局特征,它也描述了图像或图像区域所对应景物的表面性质。但由于纹理只...
  • 纹理特征提取

    万次阅读 多人点赞 2012-04-04 14:08:34
    一幅图像的纹理是在图像计算中经过量化的图像特征。图像纹理描述图像或其中小块区域的空间颜色分布和光强分布。 纹理特征的提取分为基于结构的方法和基于统计数据的方法。一个基于结构的纹理特征提取方法是将所要...
  • Opengl实现纹理贴图

    万次阅读 2018-05-18 16:24:13
    纹理贴图的步骤创建纹理对象,并为它指定一个纹理确定纹理如何应用到每个像素上启用纹理贴图功能绘制场景,提供纹理坐标和几何图形坐Tips:纹理坐标必须在RGBA模式下才能使用,在颜色索引模式下是未定义的行为一、...
  • 看了关于纹理坐标的但是感觉都没有说清楚 特整理如下: 参考文章:http://blog.csdn.NET/meegomeego/article/details/8295660 ...
  • OpenGL学习笔记——纹理贴图

    万次阅读 2015-10-30 16:23:08
    简单地说,纹理就是矩形的数据数组。例如,颜色数据、亮度数据、颜色和alpha数据。纹理数组中的单个值常常称为纹理单元(texel)。纹理贴图之所以复杂,是因为矩形的纹理可以映射到非矩形的区域,并且必须以合理的...
  • 3.1多纹理化

    万次阅读 2009-08-29 11:58:00
    3.1多纹理化 简单的说,多纹理化就是使用多个纹理贴图混合后进行渲染,如图3.1,渲染过程中,从纹理1和纹理2中分别采样,得到的颜色值依据一定规则进行组合得到纹理3,这就是多纹理化。图3.1
  • Unity3D 中动态更改材质球纹理

    万次阅读 2013-03-01 00:48:22
    动态更改材质球纹理的步骤: 1:找到对应的材质球 2:更改材质球纹理 ----> renderer.material.mainTexture = "目标纹理"; 代码如下: 点击按钮,就能实现对应功能
1 2 3 4 5 ... 20
收藏数 110,448
精华内容 44,179
关键字:

纹理