基于灰度共生矩阵纹理特征的SAR影像变化检测方法研究

合集下载

灰度和纹理特征组合的SAR影像SVM分类

灰度和纹理特征组合的SAR影像SVM分类

F h n - a g Z AN ny a , ME n -in U Z o gl n , H G We -u n i NG Qigxa g
S h o lRe t esn n no mainEn ier g c o l moeS n iga dIfr t gn ei ,Wu a nvri ,Wu a 3 0 9 hn o o n h n U iest y h n4 0 7 ,C ia
S AR影像 的纹理 往往 没 有 明显 的方 向性,属于 随 机 纹 理. 本 文 选 取 像 素 相 邻 间 隔 = 1 ,窗 口 尺寸为 7 7 x ,计 算 每 个 像 素 在 局 部 窗 口下 角 度 0 N 0 、4 。 0 和 15 等 4 。 5 、9 。 3。 个方 向的灰度共 生矩 阵,并 对 4 方 向计算 出的各统计特 征量分别取 平均,提取 个 具有 旋 转不 变性 的 5 特 征量作 为 该像 素 的 G C 个 L M 特征 向量. 122 Ga o 滤 波纹理 .. b r
a d q a tt t v p r a h s a e a p id t s s h l sf a i n r s ls n u n ia i e a p o c e x p l o a e s t e ca i c t o e u t .Ex e i e t l e u t e n t a e e s s i p rm n a s ls d mo s r t r
t a h r p s d a p o c s e e tv o AR a e c a sf a i n wih a c r c i h rt a h s b a n d h tt e p o o e p r a h i f c i e f rS i g l i c to t c u a y h g e h n t o e o t i e m s i

基于灰度共生矩阵(GLCM)的图像纹理分析与提取

基于灰度共生矩阵(GLCM)的图像纹理分析与提取

基于灰度共生矩阵(GLCM)的图像纹理分析与提取重磅干货,第一时间送达灰度共生矩阵灰度共生矩阵(Gray Level CO-Occurrence Matrix-GLCM)是图像特征分析与提取的重要方法之一,在纹理分析、特征分类、图像质量评价灯方面都有很重要的应用,其基本原理图示如下:左侧是一个图像,可以看出最小的灰度级别是1,最大的灰度级别是8,共有8个灰度级别。

右侧对应的灰度共生矩阵,左上角第一行与第一列的坐标(1, 1)包含值1,原因在于水平方向上,相距一个像素值,当前像素跟水平右侧相邻像素只有一个是1、1相邻的像素值(灰度级别)对;右侧共生矩阵的原始(1, 2) = 2 说明在像素矩阵中有两个像素值1,2相邻的像素点对、以此类推得到完整的右侧灰度共生矩阵。

根据当前像素跟相邻像素位置不同,可以计算得到不同的共生矩阵,同时根据像素之间的距离不同会输出不同灰度共生矩阵。

总结来说,有如下四种不同角度的灰度共生矩阵:•0度水平方向GLCM•45度方向GLCM•90度垂直方向GLCM•135度方向GLCM根据相邻像素点之间距离参数D不同可以得到不同距离的GLCM。

此外对正常的灰度图像来说,最小灰度值为0,最大的灰度值为255,共计256个灰度级别,所以GLCM的大小为256x256,但是我们可以对灰度级别进行降维操作,比如可以每8个灰度值表示一个level这样,这样原来256x256大小的共生矩阵就可以改成256/8 * 256 /8 = 32x32的共生矩阵。

所以最终影响灰度共生矩阵生成有三个关键参数:•角度 (支持0、45、90、135)•距离(大于等于1个像素单位)•灰度级别(最大GLCM=256 x 56)GLCM实现纹理特征计算灰度共生矩阵支持如下纹理特征计算,它们是:•能量•熵值•对比度•相关性•逆分差这些纹理特征计算公式如下:上述5个是常见的GLCM的纹理特征,GLCM总计由14个特征值输出,这里就不再赘述了!感兴趣的可以自己搜索关键字GLCM。

基于灰度共生矩阵

基于灰度共生矩阵

基于灰度共生矩阵灰度共生矩阵是一种用于描述图像纹理特征的统计方法,它能够揭示图像中不同灰度级之间的空间关系。

本文将以人类的视角,通过描述灰度共生矩阵的原理和应用,使读者能够深入了解这一技术的意义和价值。

在图像处理领域,灰度共生矩阵是一种重要的特征提取方法。

它通过统计图像中灰度级之间的空间关系,捕捉图像中的纹理特征。

通过计算灰度共生矩阵,我们可以得到一系列统计特征,如对比度、均匀度、相关度和能量等,这些特征可以用于图像分类、目标检测和图像识别等应用中。

灰度共生矩阵的计算过程相对简单,首先将图像转换为灰度图像,然后选择一定的灰度级和距离,计算每对像素的共生概率。

共生概率是指某个灰度级在给定距离和方向上与另一个灰度级同时出现的概率。

通过对所有像素对的共生概率进行统计,我们可以得到一个灰度共生矩阵。

灰度共生矩阵可以用于描述图像的纹理特征。

例如,对于一张草地的图像,灰度共生矩阵可以反映出草地纹理的均匀性和统一性。

而对于一张石头的图像,灰度共生矩阵则可以反映出石头表面的粗糙度和不规则性。

基于灰度共生矩阵的应用非常广泛。

在医学影像领域,灰度共生矩阵可以用于肿瘤的早期检测和诊断;在农业领域,灰度共生矩阵可以用于农作物的生长监测和病虫害的识别;在工业领域,灰度共生矩阵可以用于缺陷检测和质量控制。

灰度共生矩阵是一种重要的图像纹理特征提取方法,它可以揭示图像中不同灰度级之间的空间关系。

通过计算灰度共生矩阵,我们可以得到一系列统计特征,用于图像分类、目标检测和图像识别等应用中。

灰度共生矩阵的应用范围非常广泛,包括医学影像、农业和工业等领域。

通过深入了解和应用灰度共生矩阵,我们可以更好地理解和分析图像中的纹理特征,为各个领域的研究和应用提供支持。

希望本文的描述能够使读者更好地理解灰度共生矩阵的原理和应用,并对其在图像处理领域的意义和价值有所了解。

通过引发读者的兴趣,我们可以进一步深入研究和探索灰度共生矩阵的更多应用和发展方向。

灰度共生矩阵法

灰度共生矩阵法

灰度共生矩阵法灰度共生矩阵法是一种常用的图像纹理特征分析方法,它通过统计图像中不同灰度值之间出现的空间关系来描述图像的纹理特征。

本文将从以下几个方面详细介绍灰度共生矩阵法。

一、灰度共生矩阵法的基本原理灰度共生矩阵法是一种基于灰度级别的统计方法,它通过计算同一图像区域内不同位置处两个像素之间的灰度值关系,得出各种方向上不同距离处两个像素之间某些特定关系的概率分布。

具体而言,对于给定的图像I(x,y),以及距离d和角度θ,可以定义一个二元组(x,y)和另一个二元组(x+d*cosθ,y+d*sinθ)之间的关系,通常称为共生对。

然后可以通过统计所有这些共生对在整个图像中出现的频率来生成一个称为灰度共生矩阵(GLCM)的矩阵。

二、灰度共生矩阵法的主要步骤1. 灰度化:将彩色图像转换为灰度图像。

2. 分块:将整幅图像分割成若干个小块,每个小块的大小可以根据实际需求来确定。

3. 计算灰度共生矩阵:对于每个小块,计算其灰度共生矩阵。

具体而言,对于每个像素点,统计它周围距离为d、方向为θ的所有像素点的灰度值,并将这些灰度值作为共生对出现的频率填入GLCM中。

4. 特征提取:从GLCM中提取出各种特征参数。

常用的特征参数包括能量、熵、对比度、相关性等。

5. 分类识别:将提取出来的特征参数输入到分类器中进行分类识别。

三、灰度共生矩阵法的常用特征参数1. 能量(Energy):能量是指GLCM中所有元素平方和的开方,它反映了图像纹理的粗细程度。

能量越大,表示图像纹理越粗糙。

2. 熵(Entropy):熵是指GLCM中所有元素对数之和的相反数,它反映了图像纹理的复杂程度。

熵越大,表示图像纹理越复杂。

3. 对比度(Contrast):对比度是指GLCM中元素值之差与元素位置之间距离的加权和,它反映了图像纹理的明暗程度。

对比度越大,表示图像纹理越明暗分明。

4. 相关性(Correlation):相关性是指GLCM中元素值之间的线性关系程度,它反映了图像纹理的方向性。

SAR图像的检测和分类方法

SAR图像的检测和分类方法

Pij =
p
d ,θ i,j
L
(1)
∑p
d ,θ i,j
i,j
Pid,,θj 为灰度 i 和 j 共现的频率 , 该频率由距离 d 和
方向角θ决定. 分子为满足 d 、θ条件 , 灰度分别为
i 和 j 的点对数目 ; 分母为满足 d 、θ条件的所有点
对数目.
灰度共生矩阵是描述在θ方向上 , 相隔 d 像元
图 2 C 均值算法框图
Rij归入最近的一类 , 重新计算类均值 ; 如此重复循 环 ,每次计算完所有样本时计算一次误差函数 ,如果 误差函数不改变 ,则计算结束 ,得到分类结果.
3 实验结果及分析
采用灰度共生矩阵的单一统计量为特征进行分
类 ,得到分类结果 ,计算出各类间距和各类的类内方
差 ,从而从实验上得到各个统计量的性能情况 ,然后
图 1 基于灰度共生矩阵的特征向量提取算法框图
标 ,熵和相关的聚类效果最好.
212 聚类算法
表 2 给出了单一统计量进行分类得到的类间
采用 C 均值聚类算法进行聚类[6 ] , 其算法框图 距. 可以看出 ,对于陆地和河流的分类 ,和方差和熵
如图 2 所示. 在 C 均值聚类算法中 , 采用的特征向 的分类效果最好 ;对于河流和人造目标 ,对比度 、和
较小. 相反 ,对于细纹理则相对具有较大的 con 值.
在有的文献中称之为惯性矩.
③相关 (cor) 定义为
∑∑
( i - μx) ( j - μy) P ( i , j | d ,θ) σxσy
i
j
(4)
∑ ∑ ∑ 其中 , μx = i P ( i , j | d , θ) ; μy = j ·

SAR图像处理的若干关键技术

SAR图像处理的若干关键技术

SAR图像处理的若干关键技术SAR图像处理的若干关键技术合成孔径雷达(Synthetic Aperture Radar,SAR)是一种利用合成孔径波束形成技术获得高分辨率航天或地面观测图像的雷达。

相比于光学遥感,SAR具有天气无关性、全天候观测能力以及对地表遥感的穿透能力等优势。

然而,由于SAR的脉冲压缩、多普勒频率模糊、地形效应等因素,使得SAR图像的处理变得复杂而具有挑战性。

本文将探讨SAR图像处理的若干关键技术。

1. SAR图像去斑点和去噪技术SAR图像中存在着斑点和噪声,这会影响图像的可视化和后续处理。

去斑点和去噪技术旨在提高SAR图像的质量。

常见的方法包括小波去斑、中值滤波、自适应滤波以及基于稀疏表示的降噪方法等。

这些技术可以有效减少斑点和噪音,提高图像质量。

2. SAR图像去焦模糊技术合成孔径雷达通过接收连续多个雷达回波并对它们进行累积处理,以获得高分辨率图像。

然而,这种累积处理可能会导致图像模糊。

因此,需要进行去焦模糊处理。

常见的方法包括波前解扩、逆滤波和最大熵方法等。

这些方法可以有效去除图像的焦模糊现象,提高图像的分辨率。

3. SAR图像多普勒参数估计技术由于合成孔径雷达平台的运动,SAR图像中存在多普勒频率模糊现象。

为了恢复真实的地物信息,需要准确估计多普勒参数。

常见的多普勒参数估计方法包括基于最大熵准则的参数估计、基于相位解缠的参数估计和基于谱分析的参数估计等。

这些方法可以精确估计多普勒参数,降低图像的多普勒模糊程度。

4. SAR图像纹理特征提取技术纹理特征对于地物分类和目标检测具有重要意义。

SAR图像的纹理特征提取是指提取图像中的空间变化特征,并通过这些特征进行分类和检测。

常用的纹理特征提取方法包括灰度共生矩阵(GLCM)、小波变换和局部二值模式(LBP)等。

这些方法可以提取出图像中的纹理特征,为后续的分类和检测提供有效的数据支持。

5. SAR图像目标检测技术SAR图像中的目标检测是指在图像中准确地找出感兴趣的地物目标。

基于灰度共生矩阵的纹理特征提取_概述及解释说明

基于灰度共生矩阵的纹理特征提取_概述及解释说明

基于灰度共生矩阵的纹理特征提取概述及解释说明1. 引言1.1 概述纹理特征是一种用于描述图像或物体表面细节的重要特征。

在许多领域中,如计算机视觉、图像处理和模式识别等,纹理特征的提取对于实现自动分析和识别具有重要作用。

然而,由于图像数据量庞大且复杂多样,如何从中提取出有效的纹理特征一直是一个具有挑战性的问题。

1.2 文章结构本文将着重介绍一种基于灰度共生矩阵(Gray Level Co-occurrence Matrix, GLCM)的纹理特征提取方法。

为了更好地说明该方法的原理和优势,文章将依次介绍灰度共生矩阵概念、纹理特征提取方法、应用案例与实验结果分析,并最后对整个研究工作进行总结和展望。

1.3 目的本文旨在通过对基于灰度共生矩阵的纹理特征提取方法进行概述及解释说明,帮助读者深入了解该方法的原理和应用领域。

同时,通过应用案例与实验结果分析部分的介绍,使读者更好地理解该方法在模式识别中的应用价值。

最后,本文将对研究工作进行总结和展望,为未来的应用和发展提供参考。

2. 灰度共生矩阵概念2.1 灰度共生矩阵定义灰度共生矩阵(Gray-Level Co-occurrence Matrix,简称GLCM)是一种常用的纹理分析方法,用于描述图像中像素间的灰度值关系。

其基本思想是统计图像中不同位置像素对之间的灰度值相关特征,从而表征图像纹理的统计信息。

2.2 灰度共生矩阵计算方法灰度共生矩阵的计算主要包括以下步骤:首先,选择一个特定的灰度距离和方向,根据距离和方向确定相邻像素对;然后,统计这些相邻像素对在指定灰度级别上出现次数,并构建灰度级别之间的共生矩阵;最后,根据所得到的共生矩阵可以计算出一系列反映图像纹理特征的统计量。

2.3 灰度共生矩阵特性分析通过分析灰度共生矩阵可以得到多项有关图像纹理特征的统计参数。

常见的参数包括:(1) 对比度(Contrast):反映了不同灰度级别对之间强度变化的对比程度;(2) 同质性(Homogeneity):反映了不同灰度级别对之间相邻像素对灰度值接近程度的均匀性;(3) 能量(Energy):反映了图像中不同灰度级别出现的频率或概率,即图像的复杂程度;(4) 相关性(Correlation):反映了图像中不同灰度级别对之间线性相关关系的强弱;(5) 熵(Entropy):反映了图像中不确定性和复杂性,越大表示纹理越复杂。

灰度共生矩阵在医学图像处理中的应用

灰度共生矩阵在医学图像处理中的应用

灰度共生矩阵在医学图像处理中的应用灰度共生矩阵(Grey Level Co-occurrence Matrix,GLCM)是一种用于图像分析的统计方法。

它可以提取图像中的纹理特征,广泛应用于医学图像处理中,例如分割、诊断和治疗等方面。

GLCM是用来衡量图像灰度级之间相互出现的位置关系和统计特征的,即灰度级在不同方向和距离内出现的概率密度情况。

在医学图像处理中,GLCM可以用来计算肿瘤、血管、骨头等特征的纹理特征值,并根据这些特征值进行分类或诊断等操作。

下面将详细介绍GLCM的应用。

1、肿瘤识别肿瘤的良恶性诊断是临床医学中的一项重要任务。

利用肿瘤的灰度纹理特征诊断是一种非常有效的方法。

在肿瘤图像中,肿瘤因组织疏松性和小灶间隙大的特点,与周围组织的灰度差异可能比较大。

因此,GLCM可以用来评估肿瘤和周围组织的灰度分布特征,从而实现对肿瘤的诊断。

第一步是对肿瘤图像进行分割,将肿瘤区域和非肿瘤区域分开。

这里通常采用基于阈值分割、分水岭分割等方法。

接下来,利用GLCM计算各像素相邻灰度级之间的共生矩阵,可以得到多个统计特征,例如对比度、能量、熵等。

这些特征值可以用来判定肿瘤的良性和恶性程度。

例如,典型的恶性肿瘤通常伴随着高对比度、高能量、低熵等特征。

2、骨质疏松骨质疏松是一种常见疾病,也是导致自发性骨折的主要原因之一。

利用X线、CT等影像学方法对骨质疏松进行诊断是一项重要的任务。

在骨质疏松图像中,由于骨质的疏松程度不同,灰度级分布也会存在差异。

因此,GLCM可以用来评估骨密度的纹理特征。

比如,可以利用GLCM来计算骨头内部不同灰度值之间的共生矩阵,然后得到统计特征值,例如对比度、能量、熵等。

这些特征值可以用来反映骨密度的变化。

3、血管分割血管分割是医学图像处理中的一个重要应用场景。

血管图像一般存在一些特征,例如血管的形状、长度、弯曲度等。

同时,血管周围的组织灰度分布和血管内部的灰度分布也有明显差别。

利用GLCM可以对血管内部的纹理特征进行测量。

基于模式识别的图像对比度增强算法的研究与应用

基于模式识别的图像对比度增强算法的研究与应用

基于模式识别的图像对比度增强算法的研究与应用随着计算机视觉技术的不断发展,图像处理成为了一个热门领域。

在图像处理过程中,对比度增强是一项非常重要的任务。

对比度指的是图像中不同灰度级别之间的差异程度。

当图像对比度低时,图像中的物体边缘和细节可能会很难识别,从而影响图像识别和分析的准确性。

因此,对比度增强是提高图像质量和准确性的重要手段。

本文基于模式识别技术,研究并应用了一种高效的图像对比度增强算法。

该算法主要采用了两种模式识别技术:灰度共生矩阵(GLCM)和分类器。

我们先来了解一下这些技术。

灰度共生矩阵是一种用于图像分析的工具,通过对图像中灰度级别的相关性进行度量,可以提取出图像的纹理特征。

灰度共生矩阵描述了在给定距离和方向上出现的不同灰度值情况的统计概率。

从而可以利用图像的局部信息,对图像进行特定的变换和处理。

分类器是一种模式识别技术,它通过一系列对图像或数据的特征进行解析和分类的方法,实现对不同类别的图像进行自动区分。

常见的分类器有支持向量机、k 近邻算法、神经网络等。

本文的图像对比度增强算法将这两种技术有效结合,以实现高效的图像质量提升。

首先,我们利用灰度共生矩阵技术对图像中的纹理特征进行提取。

具体来说,我们将图像分成若干个小区域,计算每个区域内不同灰度级别出现的概率,然后得到每个区域的灰度共生矩阵。

得到多个灰度共生矩阵后,我们就可以进一步利用分类器来进行图像增强处理。

在分类器的选取上,我们采用了支持向量机(SVM)算法。

SVM是一种基于最大间隔分类的分类器,具有较好的分类性能和鲁棒性。

我们将灰度共生矩阵作为特征向量,利用SVM分类器对图像进行增强。

具体来说,我们将训练样本进行特定的训练和学习,建立分类模型,然后对未知图像进行分类并进行增强。

在实际应用中,我们将该算法应用于乳腺癌影像的对比度增强任务中。

由于乳腺癌影像中存在大量的纹理和细节信息,因此对比度增强尤为关键。

我们利用公开数据集进行实验,对比了本算法与传统的直方图均衡化算法以及基于小波变换的图像增强算法。

SAR图像变化检测

SAR图像变化检测
6
end for i=1:maxX for j=1:maxY if IX2(i,j)==2 IMMM(i,j)=255; else IMMM(i,j)=0; end end end if sum(sum(IMMM))>255*maxX*maxY/2 for i=1:maxX for j=1:maxY if IMMM(i,j)==255 IMMM(i,j)=0; else IMMM(i,j)=255; end end end end end function [lou,cuo,b]=pjia(I,J) %I 为实验图,J 为参考图 [Xmax,Ymax]=size(I); loujian=0;cuojian=0;a=0; for x=1:Xmax for y=1:Ymax if I(x,y)==255 &&J(x,y)==0 cuojian=cuojian+1; end if I(x,y)==0 &&J(x,y)==255 loujian=loujian+1; end if I(x,y)==J(x,y) a=a+1; end end end lou=loujian; cuo=cuojian; b=a/(Xmax*Ymax); end
7
关键字:SAR 图像 差异图 对数算子 模糊 C 均值 分割
一、 问题阐述
变化检测是指通过分析同一地区不同时间的图像, 检测出该地区的地 物随时间发生变化的信息。 SAR 图像的变化检测专指利用多时相获取的同一地表区域的 SAR 图 像来确定和分析地表变化, 能提供地物的空间展布及其变化的定性与定量 信息
五Байду номын сангаас 附代码
主程序: clc clear all close all %简单的预处理 %I1=imread('1997.05_O.bmp'); %I1=imread('1999.04.Ben.bmp'); %I1=imread('2002.5_M.bmp'); I1=imread('199509_S.bmp'); %I2=imread('1997.08_O.bmp'); %I2=imread('1999.05.Ben.bmp'); %I2=imread('2005.4_M.bmp'); I2=imread('199607_S.bmp'); I3=imread('reference_S.bmp'); I3=rgb2gray(I3); [Xmax,Ymax]=size(I3); for x=1:Xmax for y=1:Ymax if I3(x,y)>100 I3(x,y)=255; else I3(x,y)=0; end end end I1=rgb2gray(I1); I2=rgb2gray(I2); [N,L]=size(I1); I1=double(I1); I2=double(I2); I=log(((I1+1)./(I2+1))); I=imcomplement(I);%取反操作 IM mI=medfilt2(I,[4,4]);%中值滤波 fI=fcm2(mI);%模糊 C 均值 [louji,cuoji,bi]=pjia(fI,I3); figure,subplot(221),imshow(uint8(I1)); subplot(222),imshow(uint8(I2)); subplot(223),imshow(fI);title('实验结果图');

灰度矩阵纹理特征提取毕业论文

灰度矩阵纹理特征提取毕业论文

纹理是一种重要的视觉线索,是图像中普遍存在而又难以描述的特征。

纹理分类与分割是图像处理领域一个经久不衰的热点研究领域,纹理特征提取作为纹理分类与分割的首要问题,一直是人们关注的焦点,各种纹理特征提取方法层出不穷。

在广泛文献调研的基础上,回顾了纹理特征提取方法的发展历程,分析了其研究现状,对纹理特征提取方法进行了较为全面的综述,对其进行分类,最后主要研究了基于灰度共生矩阵的图像问题提取方法,研究如何有效地抽取图像纹理特征对图像进行描述,由特征值来对图像识别。

灰度共生矩阵是一种简单有效的图像纹理描述方法,该方法的优势在于:它能利用了图像中像素相对位置的空间信息更加准确地描述图像的纹理,本文就是利用灰度共生矩阵的这一特性,从该矩阵中抽取相应的统计参量作为纹理特征来实现图像识别。

关键字:灰度共生矩阵,纹理特征提取,图像识别ABSTRACTTexture is a kind of importa nt visual clues in images,is widespread and describe the characteristics. Texture classificati on and segme ntati on image process ing area a en duri ng popular research fields, texture feature extracti on as texture classificati on and segme ntati on priority, and has bee n the focus of atte nti on, all sorts of texture feature extract ion method toemerge in en dlessly.On the basis of exte nsive literature in vestigati on ‘reviews the texture feature extract ion method, an alyzes the developme nt of the research status of the texture feature extract ion method makes a comprehe nsive review of its classificati on, mai n research, fin ally based on gray symbiotic matrix image problem extract ion method, research how to effectively extract image texture feature described by the image characteristic value, to image recog niti on.Graylevel co-occurre nee matrix is a simple and effective image texture descripti on methods, this method's adva ntage is: it can use the image pixels relative positi ons of the spatial in formatio n more accurately describe the texture image, this paper is to use the graylevel co-occurre nee matrix of the properties, extract ing from the matrix corresp onding statistics as texture feature parameters to realize image recog niti on.KEY WORDS : graylevel co-occurrenee matrix, texture feature extraction, image recog niti on目录摘要 (I)ABSTRACT (II)引言 (1)第1章图像纹理特征提取方法 (3)1.1 发展与现状 (3)1.2纹理的有关定义 (4)第2章纹理特征提取方法的分类 (6)2.1纹理特征提取方法的发展 (6)2.2统计家族的灰度共生矩阵 (6)第3章图像特征提取及识别过程 (8)3.1系统流程图 (8)3.2灰度共生矩阵定义 (8)3.3四个方向灰度共生矩阵的生成 (9)3.4纹理特征参数的介绍 (11)第4章算法实现 (12)第5章对此次设计的总结与展望 (27)5.1设计中遇到的问题 (27)5.2总结与展望 (28)致谢词: (29)参考文献: (30)附录: (31)图1图像纹理应用1自然风光 遥 感 图 像 城 市 风 光 体 育 运 动 地 震 图 像 文 档 图 像 工 业 生 产 医 学 图 像 生 物 信 息 抽 象 数 据 指 纹 图 像+. *目工 标业 识检 别 测 纹 文 理 本 合 分 成割 纹理是一种重要的视觉线索,是图像中普遍存在而又难以描述的特征。

SAR图像纹理特征提取

SAR图像纹理特征提取

SAR 图像纹理特征提取1.基于灰度共生矩阵的纹理特征灰度共生矩阵表示了灰度的空间依赖关系,能够很好地反映纹理中灰度级空间相关性的 规律。

灰度共生矩阵被定义为从灰度为的像素点离开某一个固定位置关系的点上的灰度为的式中,表示集合的势,显然[为L X 的矩阵。

若(r 与间距离为,两者与坐标横轴的夹角为',则可以得到各种间距及角度的灰度共生矩阵 ],'I N I : o 由于灰度共生矩阵表示了图像中相距 的两个灰度级像素同时出现的联合概 率分布,因此,以灰度共生矩阵为基础的纹理特征是一种有效的纹理表示方法。

灰度共生矩阵不仅是角与相邻分解单元之间的函数, 而且是距离与相邻分解单元之间的函数。

对于距离为的像素i 与像素i,通常有4个角度:0 °、45°、90°、135。

因而得到 4各方向的矩阵。

为了降低运算复杂度, 在计算灰度共生矩阵前, 首先对图像进行直方图规则化, 将灰度概率(或频度)。

它不仅反映灰度的分布特性, 布特性,是有关图像灰度变换的二阶统计特征。

关于方向、相邻间隔、变换幅度的综合信息, 础。

设【v 为一幅二维数字图像,其大小为 系的灰度共生矩阵为也反映了具有同样灰度的像素之间的位置分一幅图像的灰度共生矩阵能反映出图像灰度 它是分析图像的局部模式和它们排列规则的基 帥蚀黑;像素,灰度级为,则满足一定空间关级将至16个灰度级,并构造共生矩阵。

依据灰度共生矩阵,提出了 14种统计量:角二阶矩、 对比度、相关、均方和、逆差分矩、和平均、和方差、和熵、熵、差方差、差熵、最大相关 系数、两个相关性信息测度。

可以只选择某一距离,某一角度的灰度共生矩阵,得到14种 统计量,也可考虑 4种方向的平均。

2.基于灰度-梯度共生矩阵的纹理特征灰度共生矩阵虽然能够很好地表示一种纹理模式下的像素灰度的空间关系,但它并不能 反映边缘信息。

灰度-梯度共生矩阵法师灰度级直方图和边缘梯度直方图的结合,它考虑的是像素级和边缘梯度大小的联合统计分布。

基于灰度共生矩阵的纹理分析方法研究

基于灰度共生矩阵的纹理分析方法研究

O 引 言
纹理是 自然 界物体 表面 的 自然属 性。近 2 0年来 , 随着
计算机技术 的迅速发 展以及机器视觉 系统在生产过 程 、 产 农
品质量监测 、 国防安全 、 交通管理等领 域的应用 , 纹理 图像分
析技术正在成为 机器 视觉领域研究 的热 点课题之~ 。
层检索使 用 , 适合 于描述人工规则纹理 。而对于 自然 纹理来 说, 纹理分布 的随机性使 得纹 理基元 提取 相 当困难 , 基元 之
12 1 统 计 方 法 ..
灰度共生 矩阵 ( ryLvl ooc r neMa x 是考 虑 G a ee C -cur c t ) e i r 像 素之间空 问关 系的一 种检 测纹 理特征 的统 计方 法 。灰
纹理 的统计分 析法 , 是指 在不知道纹理基 元或 尚未 检测
出基 元的情况 下对 小 区域 纹理 特征 的统计 分布 进行 纹理 分
维 自回归模型 。 I 2 4 信号处理 方法 .. 绝大多数基于信 号处理 的纹理分 析方法具有两 个步骤 : ( )利用所给定 的滤波 器对纹理 图像 滤波 ;2 1 ( )从 滤波后 的
工合成纹理 是用 计算 机算 法 模拟 或 人 为生 产 的表 面 纹理 。
其形状规则 、 确定 , 分布规 则 。( )混合纹 理 。混合 纹理 由 3
度共 生矩阵 函数通过 计算 一 幅图像 中特定 的 像素在某 一 空
间位 置关系 中出现 的次数来刻 画纹理 特征 。
析, 主要描述 纹理 基 元或 局 部模 式 随机 的 和空 间的统 计 特 征, 以表示 区域 的一致性及 区域 问的相异性 。
纹理 的统计分析 可 以在 空域 和频 域进 行 。在 图像 空 间

灰度共生矩阵提取纹理特征的实验结果分析

灰度共生矩阵提取纹理特征的实验结果分析

灰度共生矩阵提取纹理特征的实验结果分析一、本文概述本文旨在探讨灰度共生矩阵(Gray Level Co-occurrence Matrix, GLCM)在提取图像纹理特征方面的应用及其实验结果分析。

灰度共生矩阵是一种经典的纹理分析方法,通过统计图像中像素对在不同方向、不同距离上的灰度共生情况,揭示图像的纹理信息。

本文首先介绍了灰度共生矩阵的基本原理和计算方法,然后详细阐述了实验设计、数据处理过程以及结果分析方法。

实验部分采用了多种不同类型的图像样本,包括自然纹理、人工纹理等,以验证灰度共生矩阵在提取不同纹理特征时的有效性和鲁棒性。

对实验结果进行了详细的分析和讨论,探讨了灰度共生矩阵在不同纹理特征提取中的优势和局限性,为后续的纹理分析和图像识别工作提供了有益的参考和借鉴。

二、灰度共生矩阵理论基础灰度共生矩阵(Gray Level Co-occurrence Matrix, GLCM)是一种用于描述图像局部纹理特性的统计方法。

它基于像素间的空间关系,通过计算图像中不同位置和方向上的像素对出现的频率来构建共生矩阵,进而提取纹理特征。

定义像素对的位置和方向:需要确定像素对之间的相对位置和方向。

常见的方向有0°、45°、90°和135°,这些方向能够覆盖图像的大部分纹理特征。

计算像素对出现的频率:对于给定的方向和位置,统计图像中所有满足条件的像素对出现的次数。

这些条件通常包括像素对的灰度级和相对位置。

构建共生矩阵:将统计得到的频率值填入一个矩阵中,该矩阵的行和列分别对应像素对的灰度级。

这样,矩阵中的每个元素都表示特定灰度级组合出现的频率。

通过灰度共生矩阵,可以提取出多种纹理特征,如能量、对比度、熵等。

这些特征能够反映图像的纹理复杂度、均匀性和方向性等。

例如,能量特征描述了图像纹理的均匀程度,对比度特征反映了图像的清晰度和局部变化程度,而熵特征则衡量了图像纹理的复杂性和随机性。

基于灰度共生矩阵提取纹理特征图像的研究

基于灰度共生矩阵提取纹理特征图像的研究
是 一个 经典 的统计 分析 方法 , 它 的研 究 也 已经 对
有 了很 久 的历 史 , 目前 公认 的一 种纹 理分 析 方 是
法 [ 。H rlk于 17 1 1 aac i 9 3首先 提 出灰度共 生 矩 阵 (L M ,其 优 于灰度 游 程长 度法 和 光谱 方法 , GC ) 是
提 取 的 纹理 特 征 对 图像 分 类精 度提 高起 到一 定 的作 用 。
【 关键词1 灰度共生矩阵; 纹理 ; 特征图像 ; 分类
[ 中图分类号】 P 3 27 [ 文献标识码】 B [ 文章编码】 10 — 00 20 0 — 0 7 3 0 ( 0 7)3 5
采 用 单 纯 的光 谱 特 征 进 行 遥 感 影 像 分 类 易 产生 “ 同物 异谱 ”现象 , 响分 类精 度 , 非光 谱 影 用 信 息 的纹 理特 征可辅 助光谱 特征 分类 。每一种 地
[ 要】 在遥感影像分类的过程 中非光谱特征起 着重要 的辅助作用。纹理特征作 为一种重要的非光谱特 摘
征对 于遥感影像分类精度 的提 高也有很 重要 的作 用。本文主要研 究 了通过灰度共生矩阵提取纹理特征 图像的方 法, 对该方法提取纹理特征 图像进行 了相关的实验分析 。并将其在分类 中的应 用进行 实验 , 证明 了灰度共生矩阵

P,8 0=(y( A , A ) x ) (, , ){ ,,+ x + yl ,= i j [ ) x x y J yi f
f +Ax + )j = ,,, N- ;= ,,, ( x , △y_; 01 …, 1 y 01 …, y x 2 2
Ny 1 - l
种 得 以广 泛 应 用 的 常用 的纹 理 统 计 分 析 方法
的行列 数 。

基于并行灰度级差共生矩阵的图像纹理检测

基于并行灰度级差共生矩阵的图像纹理检测
c lu ae h h n e r t ft e i g r y c l . a tt ec a n lp o e s i d cd d a d t e p x l n e c n e td ac l td te c a g ae o ma e g a s a e At s h h n e r c s s e ie n h i e i tr o n ce h l
第 4 卷 第 1 1 1期
21 0 1年 1 月 1
激 光 与 红 外
L E AS R & I R NF ARE D
Vo . , . 1 141 No 1 No e e , 01 v mb r 2 1
文章编号 : 0— 7(011— 8- 1 1 0821)1 27 5 0 5 1 0
灰度 一 梯度方法用灰度和梯度的综合信息提取 纹理 , 考虑像素灰度 与边 缘梯度的联合统计 分布。 如果像素点的邻域中心和它的邻域灰度均值 比较接
近 , 边界 附近像 素 点 以及 噪声 的灰 度值 和邻 域 灰 而
复杂的物理图像分解为简单 的纹理图像单元按
某种方 式排 列组 合 而 成 , 理 单元 为 最 小 区 域 的纹 纹 理 信息 , 能够 表 述 图像 的微 纹 理 。本 文 采 用并 行 灰
Ke r s GL y wo d : CM ; i e e t l p r l l d tc in d f rn i ; a al ; ee t a e o
l 引 言
比较适合 自然纹理的分析 ; 频域滤波器族是一种以
图像 梯度 信 息表示 图像 纹 理 特征 的方 法 , 是 仅包 但 含 了图像 水 平和垂 直 方 向 的梯 度 , 失 了其 他 方 向 丢
・图像 与信 号处理 ・

遥感影像处理中的纹理分析方法探讨

遥感影像处理中的纹理分析方法探讨

遥感影像处理中的纹理分析方法探讨遥感影像处理是一项重要的技术,可以提供大量的地理信息,用于环境监测、资源管理和城市规划等领域。

在遥感影像处理中,纹理分析方法是一种常用的技术,可以提取图像中的纹理信息,帮助我们理解和描述地物的特征。

本文将探讨一些常见的纹理分析方法,并介绍它们在遥感影像处理中的应用。

首先,我们来介绍一种常见的纹理分析方法——灰度共生矩阵(Gray LevelCo-occurrence Matrix,GLCM)。

灰度共生矩阵可以用来描述图像中不同像素对之间的灰度变化关系,从而提取纹理信息。

它基于一个假设,即相同纹理的像素对在图像中的分布应具有一定的统计规律。

通过计算灰度共生矩阵中的各种统计特征,如对比度、相关度、能量和熵等,可以得到图像的纹理特征。

灰度共生矩阵在遥感影像处理中有广泛的应用。

例如,在土地利用分类中,可以利用灰度共生矩阵提取不同土地类型的纹理特征,从而进行分类分析。

此外,灰度共生矩阵还可以用来检测图像中的纹理边界,帮助我们识别建筑物、道路等地物。

另一种常见的纹理分析方法是小波变换。

小波变换是一种时频分析方法,可以将图像分解为不同频率的子带图像,从而提取图像的纹理信息。

小波变换的特点是可以捕捉到图像的局部特征,对于纹理边界和纹理的细节描述具有较好的效果。

小波变换在遥感影像处理中也有广泛的应用。

例如,在地表覆盖变化检测中,可以利用小波变换提取图像的纹理特征,从而识别出不同时间段的遥感影像中地物的变化情况。

此外,小波变换还可以用于地物提取、遥感图像的增强等方面。

除了上述方法外,还有一些其他的纹理分析方法也值得关注。

例如,局部二值模式(Local Binary Pattern,LBP)是一种基于像素之间灰度差异的纹理分析方法。

LBP可以用来描述图像中不同像素点的灰度分布模式,从而提取纹理特征。

在遥感影像处理中,LBP可以应用于图像分类、目标检测等方面。

总结起来,纹理分析方法在遥感影像处理中起着重要的作用。

医学影像处理中的病灶检测方法与技巧

医学影像处理中的病灶检测方法与技巧

医学影像处理中的病灶检测方法与技巧医学影像是现代医学领域中不可或缺的重要工具,它能够帮助医生们更准确地诊断和治疗患者。

但是,医学影像中的病灶检测对医生来说常常是一项艰巨的任务,因为病灶往往在图像中非常微小且难以分辨。

因此,研究人员开发了各种方法和技巧来提高医学影像中病灶的检测精度。

本文将介绍一些常见的医学影像处理中的病灶检测方法与技巧。

首先,一种常见的方法是基于特征提取的病灶检测方法。

这种方法通过分析医学影像中的图像特征,比如颜色、纹理和形状等,来确定潜在的病灶区域。

其中,最常用的特征提取方法是灰度共生矩阵(GLCM)和小波变换。

灰度共生矩阵用于描述图像中不同位置的像素灰度之间的关系,而小波变换则可以将图像分解为不同频率的子图像,进而提取图像的纹理特征。

通过应用这些特征提取方法,医生们可以更好地区分正常组织和病灶区域。

其次,机器学习方法也广泛应用于医学影像处理中的病灶检测。

机器学习是一种通过构建模型来识别和分类图像的方法。

在医学影像中,机器学习可以应用于病灶的自动检测和分类。

其中,最常用的机器学习算法包括支持向量机(SVM)、人工神经网络(ANN)和深度学习。

这些算法可以通过学习一系列已标记的医学影像样本来自动识别和分类新的未标记样本。

通过机器学习方法,医生们可以减少对图像的主观判断,提高病灶的检测精度和准确性。

另外,图像分割也是医学影像处理中常用的病灶检测技巧。

图像分割是将医学影像中的图像划分为若干个不同的区域的过程。

图像分割可以帮助医生们将病灶从背景中提取出来,从而更容易进行病灶的检测和分析。

常用的图像分割方法包括阈值分割、区域生长和边缘检测等。

通过图像分割技术,医生们可以更好地分析病灶的形态、大小和位置等特征,进而做出准确的诊断和治疗计划。

此外,医学影像处理中的病灶检测还可以借助智能算法来改善。

智能算法是一种模仿人类智能进行推理和决策的方法。

在医学影像中,智能算法可以通过学习大量的医学影像数据来自动进行病灶检测。

基于灰度共生矩阵的纹理提取

基于灰度共生矩阵的纹理提取

基于灰度共⽣矩阵的纹理提取1 前⾔纹理特征在地物光谱特征⽐较相似的时候常作为⼀种特征⽤于图像的分类和信息提取。

本⽂主要介绍基于灰度共⽣矩阵的图像纹理提取。

2 灰度共⽣矩阵纹理⽯油灰度分布在空间位置上反复出现⽽形成的,因⽽图像空间中相隔某距离的两个像素之间存在⼀定的灰度关系,即图像中灰度的空间相关特性。

灰度共⽣矩阵是⼀种通过研究灰度的空间相关特性来描述纹理的常⽤⽅法。

有⼀个⽹站提供了⾮常详细的关于灰度共⽣矩阵的介绍,我在这⾥就不赘述了。

⽹址如下:3 纹理提取的算法流程本⽂重点说明⼀下遥感影像纹理提取的算法流程,如下图1所⽰:图 1 纹理提取算法流程具体描述如下:1) 灰度降级,对原始影像进⾏灰度降级如8,16,32,64等;纹理计算的灰度降级策略来源于IDL的bytscl函数介绍,具体描述如下:图 2 灰度降级2) 根据设定好的窗⼝⼤⼩,逐窗⼝计算灰度共⽣矩阵;3) 根据选择的⼆阶统计量,计算纹理值。

4 纹理算⼦协同性(GLCM_HOM):对应ENVI的Homogeneity反差性(GLCM_CON):⾮相似性(GLCM_DIS):均值GLCM_MEAN:对应ENVI的Mean⽅差GLCM_VAR:对应ENVI的Variance⾓⼆阶矩GLCM_ASM:对应ENVI的Second Moment相关性GLCM_COR:对应ENVI的CorrelationGLDV⾓⼆阶矩GLDV_ASM:熵GLCM_ENTROPY:对应ENVI的Entropy归⼀化⾓⼆阶矩GLDV_CON:对应ENVI的Contrast5 代码实现同样实现了CPU和GPU两个版本。

但是⽬前效率较低,要是有哪位⼤神可以指点下如何提⾼纹理计算的效率感激不尽~先上传头⽂件和源⽂件1#pragma once2 #include <iostream>3 #include <string>4 #include <vector>56class CCo_occurrenceTextureExtration7 {8public:9 CCo_occurrenceTextureExtration(void);10 ~CCo_occurrenceTextureExtration(void);111213 typedef enum ANGLE_TYPE14 {15 DEGREE_0,16 DEGREE_45,17 DEGREE_90,18 DEGREE_13519 };20 typedef enum LIST_TYPE21 {22 GLCM_HOM,23 GLCM_CON,24 GLCM_DIS,25 GLCM_MEAN,26 GLCM_VAR,27 GLCM_ASM,28 GLCM_COR,29 GLDV_ASM,30 GLCM_ENTROPY,31 GLDV_MEAN,32 GLDV_CON,33 };343536//影像灰度降级(包括直⽅图均衡化)37bool Init();38bool ReduceGrayLevel();39bool ExtraTextureWinEXE();40bool ExtraTexturePixEXE();41int ExtraTexturePixOpenCLEXE();42private:43char* LoadProgSource(const char* cFilename, const char* cPreamble, size_t* szFinalLength);44bool GetGrayCoocurrenceMatrix(std::vector<std::vector<int>>grayValue,45 std::vector<std::vector<float>> &grayMatrix,int &m_count);46float CalGLCMStatistics(std::vector<std::vector<float>> grayMatrix,47const int count);48double* cdf(int *h,int length);4950public:51 std::string m_strInFileName;52 std::string m_strOutFileName;53 std::string m_strReduceLevelFileName;54int m_iWidth;55int m_iHeigth;56int m_iBandCount;57int *m_BandMap;58int m_AngleMode;59int m_TextureMode;60int m_dis;61int m_grayLevel;62int m_winWidth;63int m_winHeigth;6465 };源⽂件如下:4 #include <math.h>5 #include <omp.h>6 #include <CL/cl.h>7 #include <stdlib.h>8 #include <malloc.h>9#pragma comment(lib,"OpenCL.lib")1011 CCo_occurrenceTextureExtration::CCo_occurrenceTextureExtration( )12 {13 m_BandMap = NULL;14 }15 CCo_occurrenceTextureExtration::~CCo_occurrenceTextureExtration(void)16 {17if(!m_BandMap){18delete []m_BandMap;19 }20 }2122bool CCo_occurrenceTextureExtration::Init()23 {24 GDALAllRegister();25 GDALDataset *poDS = (GDALDataset*)GDALOpen(m_strInFileName.c_str(),GA_ReadOnly);26 m_iWidth = poDS->GetRasterXSize();27 m_iHeigth = poDS->GetRasterYSize();28 m_iBandCount = poDS->GetRasterCount();2930 m_BandMap = new int[m_iBandCount];31int i = 0;32while(i < m_iBandCount){33 m_BandMap[i] = i+1;34 i++;35 }36 GDALClose((GDALDatasetH)poDS);37return TRUE;38 }3940bool CCo_occurrenceTextureExtration::ReduceGrayLevel()41 {42//直⽅图均衡化43///// 统计直⽅图44 GDALAllRegister();45 GDALDataset *poDS = (GDALDataset*)GDALOpen(m_strInFileName.c_str(),GA_ReadOnly);46double adfMSSGeoTransform[6] = {0};47 poDS->GetGeoTransform(adfMSSGeoTransform);48 GDALDataType eDT = poDS->GetRasterBand(1)->GetRasterDataType();49//创建⽂件50 GDALDriver *poOutDriver = (GDALDriver*)GDALGetDriverByName("GTIFF");51 GDALDataset *poOutDS = poOutDriver->Create(m_strReduceLevelFileName.c_str(),52 m_iWidth,m_iHeigth,m_iBandCount,GDT_Byte,NULL);53 poOutDS->SetGeoTransform(adfMSSGeoTransform);54 poOutDS->SetProjection(poDS->GetProjectionRef());55for(int i = 0;i<m_iBandCount;i++){56double *bandMINMAX = new double[2];57 GDALRasterBand *poBand = poDS->GetRasterBand(m_BandMap[i]);58 GDALRasterBand *poNewBand = poOutDS->GetRasterBand(i+1);59 poBand->ComputeRasterMinMax(FALSE,bandMINMAX);60for(int j = 0;j<m_iHeigth;j++){61double *readBuff = new double[m_iWidth];62 unsigned char*writeBuff = new unsigned char[m_iWidth];63 poBand->RasterIO(GF_Read,0,j,m_iWidth,1,readBuff,m_iWidth,1,GDT_Float64,0,0);64int k = 0;65while(k<m_iWidth){66int tmp = 0;67if(eDT == GDT_Float32 || eDT == GDT_Float64){68 tmp = int((m_grayLevel-1+0.99999)*(readBuff[k] - bandMINMAX[0])/(bandMINMAX[1] - bandMINMAX[0]));69 }else{70 tmp = int((m_grayLevel)*(readBuff[k] - bandMINMAX[0] - 1)/(bandMINMAX[1] - bandMINMAX[0]));71 }72 writeBuff[k] = unsigned char(tmp);73 k++;74 }75 CPLErr str = poNewBand->RasterIO(GF_Write,0,j,m_iWidth,1,writeBuff,m_iWidth,1,GDT_Byte,0,0);76delete []readBuff;readBuff = NULL;77delete []writeBuff;writeBuff = NULL;78 }79delete []bandMINMAX;bandMINMAX = NULL;80 }81 GDALClose((GDALDatasetH) poDS);82 GDALClose((GDALDatasetH) poOutDS);83return TRUE;84 }8586double* CCo_occurrenceTextureExtration::cdf( int *h,int length )87 {88int n = 0;89for( int i = 0; i < length - 1; i++ )90 {91 n += h[i];92 }93double* p = new double[length];94int c = h[0];98 c += h[i];99 p[i] = ( double )c / n;100 }101return p;102 }103104char* CCo_occurrenceTextureExtration::LoadProgSource( const char* cFilename, const char* cPreamble, size_t* szFinalLength ) 105 {106 FILE* pFileStream = NULL;107 size_t szSourceLength;108109// open the OpenCL source code file110 pFileStream = fopen(cFilename, "rb");111if(pFileStream == 0)112 {113return NULL;114 }115116 size_t szPreambleLength = strlen(cPreamble);117118// get the length of the source code119 fseek(pFileStream, 0, SEEK_END);120 szSourceLength = ftell(pFileStream);121 fseek(pFileStream, 0, SEEK_SET);122123// allocate a buffer for the source code string and read it in124char* cSourceString = (char *)malloc(szSourceLength + szPreambleLength + 1);125 memcpy(cSourceString, cPreamble, szPreambleLength);126if (fread((cSourceString) + szPreambleLength, szSourceLength, 1, pFileStream) != 1)127 {128 fclose(pFileStream);129free(cSourceString);130return0;131 }132133// close the file and return the total length of the combined (preamble + source) string134 fclose(pFileStream);135if(szFinalLength != 0)136 {137 *szFinalLength = szSourceLength + szPreambleLength;138 }139 cSourceString[szSourceLength + szPreambleLength] = '\0';140141return cSourceString;142 }143144bool CCo_occurrenceTextureExtration::GetGrayCoocurrenceMatrix(std::vector<std::vector<int>>grayValue,145 std::vector<std::vector<float>> &m_grayMatrix,146int &m_count)147 {148int i,j,r,c;149 m_count = 0;150int ii = 0;151152switch(m_AngleMode)153 {154case DEGREE_0:155 i = 0;156while(i<m_winHeigth){157 j = 0;158while(j<m_winWidth){159int endR = i;160int endC = j + m_dis;161if(endC < m_winWidth){162 r = grayValue[i][j];163 c = grayValue[endR][endC];164 m_grayMatrix[r][c] += 1;165 m_grayMatrix[c][r] += 1;166 m_count = m_count+2;167 }168 j++;169 }170 i++;171 }172break;173case DEGREE_45:174 i = 0;175while(i<m_winHeigth){176 j = 0;177while(j<m_winWidth){178int endR = i - m_dis;179int endC = j + m_dis;180if(endR>=0 && endR < m_winHeigth && endC >=0 && endC < m_winWidth){181 r = grayValue[i][j];182 c = grayValue[endR][endC];183 m_grayMatrix[r][c] += 1;184 m_grayMatrix[c][r] += 1;185 m_count = m_count+2;186 }187 j++;188 }192case DEGREE_90:193 i= 0;194while(i<m_winHeigth){195 j = 0;196while(j < m_winWidth){197int endR = i - m_dis;198int endC = j;199if(endR >= 0){200 r = grayValue[i][j];201 c = grayValue[endR][endC];202 m_grayMatrix[r][c] += 1;203 m_grayMatrix[c][r] += 1;204 m_count = m_count+2;205 }206 j++;207 }208 i++;209 }210break;211case DEGREE_135:212 i = 0;213while(i<m_winHeigth){214 j = 0;215while(j<m_winWidth){216int endR = i - m_dis;217int endC = j - m_dis;218if(endR >= 0 && endC >= 0){219 r = grayValue[i][j];220 c = grayValue[endR][endC];221 m_grayMatrix[r][c] += 1;222 m_grayMatrix[c][r] += 1;223 m_count = m_count+2;224 }225 j++;226 }227 i++;228 }229break;230default:231return FALSE;232 }233return TRUE;234 }235236float CCo_occurrenceTextureExtration::CalGLCMStatistics(std::vector<std::vector<float>> m_grayMatrix, 237const int m_count)238 {239int i,j,k;240float imean = 0.0f;241float jmean = 0.0f;242float ivar = 0.0f;243float jvar = 0.0f;;244float res = 0.0f;245switch(m_TextureMode)246 {247case GLCM_HOM: //同质性248 i = 0;249while(i < m_grayLevel){250 j = 0;251while(j < m_grayLevel){252if(m_grayMatrix[i][j] != 0){253float Pij = m_grayMatrix[i][j]*1.0f/m_count;254 res += Pij/(1 + (i-j)*(i-j));255 }256 j++;257 }258 i++;259 }260break;261case GLCM_CON: //对⽐度262 i = 0;263while(i < m_grayLevel){264 j = 0;265while(j < m_grayLevel){266if(m_grayMatrix[i][j] != 0){267float Pij = m_grayMatrix[i][j]*1.0f/m_count;268 res += Pij*(i-j)*(i-j);269 }270 j++;271 }272 i++;273 }274break;275case GLCM_DIS: //⾮相似性276 i = 0;277while(i < m_grayLevel){278 j = 0;279while(j < m_grayLevel){280if(m_grayMatrix[i][j] != 0){281float Pij = m_grayMatrix[i][j]*1.0f/m_count;282 res += Pij*std::abs(i-j);287 }288break;289case GLCM_COR: // 相关性290 i = 0;291while(i < m_grayLevel){292 j = 0;293while(j < m_grayLevel){294if(m_grayMatrix[i][j] != 0){295float Pij = m_grayMatrix[i][j]*1.0f/m_count;296 imean += Pij * i;297 jmean += Pij * j;298 }299 j++;300 }301 i++;302 }303// var304 i = 0;305while(i < m_grayLevel){306 j = 0;307while(j < m_grayLevel){308if(m_grayMatrix[i][j] != 0){309float Pij = m_grayMatrix[i][j]*1.0f/m_count;310 ivar += Pij * (i - imean)*(i - imean);311 jvar += Pij * (j - imean)*(j - imean);312 }313 j++;314 }315 i++;316 }317// xiangguanx318 i = 0;319while(i < m_grayLevel){320 j = 0;321while(j < m_grayLevel){322if(m_grayMatrix[i][j] != 0){323float Pij = m_grayMatrix[i][j]*1.0f/m_count;324 res += (Pij *(i - imean)*(j - jmean))/sqrt(ivar*jvar); 325 }326 j++;327 }328 i++;329 }330break;331case GLCM_MEAN: // 均值332 i = 0;333while(i < m_grayLevel){334 j = 0;335while(j < m_grayLevel){336if(m_grayMatrix[i][j] != 0){337float Pij = m_grayMatrix[i][j]*1.0f/m_count;338 imean += Pij * i;339//jmean += Pij * j;340 }341 j++;342 }343 i++;344 }345 res = imean;346break;347case GLCM_VAR: // ⽅差348// mean349 i = 0;350while(i < m_grayLevel){351 j = 0;352while(j < m_grayLevel){353if(m_grayMatrix[i][j] != 0){354float Pij = m_grayMatrix[i][j]*1.0f/m_count;355 imean += Pij * i;356 }357 j++;358 }359 i++;360 }361// var362 i = 0;363while(i < m_grayLevel){364 j = 0;365while(j < m_grayLevel){366if(m_grayMatrix[i][j] != 0){367float Pij = m_grayMatrix[i][j]*1.0f/m_count;368 ivar += Pij * (i - imean)*(i - imean);369 }370 j++;371 }372 i++;373 }374//res = (ivar + jvar)/2;375 res = ivar;376break;381while(j < m_grayLevel){382if(m_grayMatrix[i][j] != 0){383float Pij = m_grayMatrix[i][j]*1.0f/m_count;384 res += Pij*Pij;385 }386 j++;387 }388 i++;389 }390break;391case GLCM_ENTROPY: // 熵392 i = 0;393while(i < m_grayLevel){394 j = 0;395while(j < m_grayLevel){396if(m_grayMatrix[i][j] != 0){397float Pij = m_grayMatrix[i][j]*1.0f/m_count;398 res += -1.0f*Pij * log(Pij);399 }400 j++;401 }402 i++;403 }404break;405case GLDV_MEAN:406 k = 0;407while(k<m_grayLevel){408 i = 0;409while(i < m_grayLevel){410 j = 0;411while(j < m_grayLevel){412if(m_grayMatrix[i][j] != 0 && std::abs(i-j)== k){413float Pij = m_grayMatrix[i][j]*1.0f/m_count;414 res += Pij*k;415 }416 j++;417 }418 i++;419 }420 k++;421 }422break;423case GLDV_CON:424 k = 0;425while(k<m_grayLevel){426 i = 0;427while(i < m_grayLevel){428 j = 0;429while(j < m_grayLevel){430if(m_grayMatrix[i][j] != 0 && std::abs(i-j)== k){431float Pij = m_grayMatrix[i][j]*1.0f/m_count;432 res += Pij*k*k;433 }434 j++;435 }436 i++;437 }438 k++;439 }440break;441case GLDV_ASM:442 k = 0;443while(k<m_grayLevel){444 i = 0;445while(i < m_grayLevel){446 j = 0;447while(j < m_grayLevel){448if(m_grayMatrix[i][j] != 0 && std::abs(i-j)== k){449float Pij = m_grayMatrix[i][j]*1.0f/m_count;450 res += Pij*Pij;451 }452 j++;453 }454 i++;455 }456 k++;457 }458break;459 }460return res;461 }462463bool CCo_occurrenceTextureExtration::ExtraTextureWinEXE()464 {465//读影像466 GDALAllRegister();467 GDALDataset *poDS = (GDALDataset*)GDALOpen(m_strReduceLevelFileName.c_str(),GA_ReadOnly); 468if(!poDS){469return FALSE;470 }475 GDALDriver *poOutDriver = (GDALDriver*)GDALGetDriverByName("GTIFF");476 GDALDataset *poOutDS = poOutDriver->Create(m_strOutFileName.c_str(),477 m_iWidth,m_iHeigth,m_iBandCount,GDT_Float32,NULL);478 poOutDS->SetGeoTransform(adfMSSGeoTransform);479 poOutDS->SetProjection(poDS->GetProjectionRef());480int b = 0;481while(b<m_iBandCount){482 GDALRasterBand *poBand = poDS->GetRasterBand(b+1);483 GDALRasterBand *poNewBand = poOutDS->GetRasterBand(b+1);484int i = 0;485while(i<m_iHeigth){486int startR = i;487int endR = startR + m_winHeigth - 1;488if(endR > m_iHeigth-1){489 endR = m_iHeigth - 1;490 startR = endR - m_winHeigth + 1;491 }492 unsigned char *readBuff = new unsigned char[m_iWidth * m_winHeigth];493float *writeBuff = new float[m_iWidth* m_winHeigth];494 poBand->RasterIO(GF_Read,0,startR,m_iWidth,m_winHeigth,readBuff,m_iWidth,495 m_winHeigth,GDT_Byte,0,0);496497int j = 0;498while(j < m_iWidth){499int startC = j;500int endC = startC + m_winWidth - 1;501if(endC > m_iWidth - 1){502 endC = m_iWidth - 1;503 startC = endC - m_winWidth + 1;504 }505 std::vector<std::vector<int>> grayValue;506 grayValue = std::vector<std::vector<int>>(m_winHeigth,std::vector<int>(m_winWidth,0));507 std::vector<std::vector<float>> grayMatrix;508 grayMatrix = std::vector<std::vector<float>>(m_grayLevel,std::vector<float>(m_grayLevel,0.0f)); 509int k = 0;510while(k < m_winHeigth){511int l = 0 ;512while(l < m_winWidth){513 grayValue[k][l] = int(readBuff[k*m_iWidth +startC+l]);514 l++;515 }516 k++;517 }518int count = 0;519if(!GetGrayCoocurrenceMatrix(grayValue,grayMatrix,count)){520return FALSE;521 }522float tmp = CalGLCMStatistics(grayMatrix,count);523 k = 0;524while(k < m_winHeigth){525int l = 0 ;526while(l < m_winWidth){527 writeBuff[k*m_iWidth +startC+l] = tmp;528 l++;529 }530 k++;531 }532 j = j + m_winWidth;533 }534 poNewBand->RasterIO(GF_Write,0,startR,m_iWidth,m_winHeigth,writeBuff,m_iWidth,535 m_winHeigth,GDT_Float32,0,0);536//更新灰度共⽣矩阵537delete []readBuff;readBuff = NULL;538delete []writeBuff;writeBuff = NULL;539 i = i + m_winHeigth;540 }541 b++;542 }543 GDALClose((GDALDatasetH)poDS);544 GDALClose((GDALDatasetH)poOutDS);545return TRUE;546 }547548bool CCo_occurrenceTextureExtration::ExtraTexturePixEXE()549 {550//读影像551 GDALAllRegister();552 GDALDataset *poDS = (GDALDataset*)GDALOpen(m_strReduceLevelFileName.c_str(),GA_ReadOnly); 553if(!poDS){554return FALSE;555 }556double adfMSSGeoTransform[6] = {0};557 poDS->GetGeoTransform(adfMSSGeoTransform);558//创建⽂件559 GDALDriver *poOutDriver = (GDALDriver*)GDALGetDriverByName("GTIFF");560 GDALDataset *poOutDS = poOutDriver->Create(m_strOutFileName.c_str(),561 m_iWidth,m_iHeigth,m_iBandCount,GDT_Float32,NULL);562 poOutDS->SetGeoTransform(adfMSSGeoTransform);563 poOutDS->SetProjection(poDS->GetProjectionRef());564int nLineSpace,nPixSpace,nBandSpace;568569int iNumRow = 128; // 分块读取的⾏数570int overloadPix = m_winHeigth-1;571if(m_iHeigth < iNumRow && m_iHeigth > m_winHeigth){572 iNumRow = m_winHeigth;573 }574if(m_iHeigth < m_winHeigth){575return FALSE;576 }577int loopNum = (m_iHeigth + iNumRow - 1)/(iNumRow - overloadPix);578float stepProcess = 100.0f/(100.0f*loopNum*(iNumRow - overloadPix));579580for(int i = 0;i<loopNum;i++){581int tmpRowNum = iNumRow;582int startR = i*iNumRow - i*(overloadPix/2);583if(startR < 0)584 {585 startR = 0;586 }587int endR = startR + tmpRowNum - 1;588if(endR > m_iHeigth -1 ){589 endR = m_iHeigth -1;590 tmpRowNum = endR - startR + 1;591 }592 unsigned char *readBuff = new unsigned char[tmpRowNum*m_iWidth*m_iBandCount];593float *writeBuff = new float[m_iWidth*m_iBandCount*(tmpRowNum - overloadPix)];594 poDS->RasterIO(GF_Read,0,startR,m_iWidth,tmpRowNum,readBuff,m_iWidth,595 tmpRowNum,GDT_Byte,m_iBandCount,m_BandMap,nPixSpace,nLineSpace,nBandSpace);596597for(int iR = overloadPix/2;iR < tmpRowNum - overloadPix/2;iR++)598 {599// zhuyong 2016 10 17600#pragma omp parallel for num_threads(2)601for(int j = 0;j < m_iWidth;j++)602 {603int startC = j - m_winWidth/2;604int endC = j + m_winWidth/2;605if(startC<0){606 startC = 0;607 endC = startC + m_winWidth -1;608 }609if(endC > m_iWidth-1){610 endC = m_iWidth -1;611 startC = endC - m_winWidth +1;612 }613// 波段计算614int b = 0;615while(b < m_iBandCount){616// 获取灰度值617 std::vector<std::vector<int>> grayValue;618 grayValue = std::vector<std::vector<int>>(m_winHeigth,std::vector<int>(m_winWidth,0));619 std::vector<std::vector<float>> grayMatrix;620 grayMatrix = std::vector<std::vector<float>>(m_grayLevel,std::vector<float>(m_grayLevel,0.0f));621int k = 0;622while(k < m_winHeigth){623int l = 0 ;624while(l < m_winWidth){625 grayValue[k][l] = int(readBuff[(iR - overloadPix/2 + k)*m_iWidth*m_iBandCount + b*m_iWidth + startC+l]);626 l++;627 }628 k++;629 }630int count = 0;631if(!GetGrayCoocurrenceMatrix(grayValue,grayMatrix,count)){632 }633float tmp = CalGLCMStatistics(grayMatrix,count);634 writeBuff[(iR- overloadPix/2)*m_iWidth*m_iBandCount+ b*m_iWidth + j] = tmp;635 b++;636 }637 }638 }639 poOutDS->RasterIO(GF_Write,0,startR+overloadPix/2,m_iWidth,tmpRowNum - overloadPix,writeBuff,640 m_iWidth,tmpRowNum - overloadPix,GDT_Float32,m_iBandCount,m_BandMap,nPixSpace,sizeof(float)*m_iWidth*m_iBandCount, 641sizeof(float)*m_iWidth);642delete []readBuff;readBuff = NULL;643delete []writeBuff;writeBuff = NULL;644 }645646 GDALClose((GDALDatasetH)poDS);647 GDALClose((GDALDatasetH)poOutDS);648return TRUE;649 }650651int CCo_occurrenceTextureExtration::ExtraTexturePixOpenCLEXE()652 {653//读影像654 GDALAllRegister();655 GDALDataset *poDS = (GDALDataset*)GDALOpen(m_strReduceLevelFileName.c_str(),GA_ReadOnly);656if(!poDS){657return FALSE;658 }662 GDALDriver *poOutDriver = (GDALDriver*)GDALGetDriverByName("GTIFF");663 GDALDataset *poOutDS = poOutDriver->Create(m_strOutFileName.c_str(),664 m_iWidth,m_iHeigth,m_iBandCount,GDT_Float32,NULL);665 poOutDS->SetGeoTransform(adfMSSGeoTransform);666 poOutDS->SetProjection(poDS->GetProjectionRef());667668int nLineSpace,nPixSpace,nBandSpace;669 nLineSpace = sizeof(unsigned char)*m_iWidth*m_iBandCount;670 nPixSpace = 0;671 nBandSpace = sizeof(unsigned char)*m_iWidth;672673int iNumRow = 32; // 分块读取的⾏数674int overloadPix = m_winHeigth-1;675if(m_iHeigth < iNumRow && m_iHeigth > m_winHeigth){676 iNumRow = m_winHeigth;677 }678if(m_iHeigth < m_winHeigth){679return FALSE;680 }681int loopNum = ceil((m_iHeigth*1.0f - iNumRow)/(iNumRow - overloadPix)) + 1;682683// OpenCL部分 =============== 1 创建平台684 cl_uint num_platforms;685 cl_int ret = clGetPlatformIDs(0,NULL,&num_platforms);686if(ret != CL_SUCCESS || num_platforms < 1){687 printf("clGetPlatformIDs Error\n");688return -1;689 }690 cl_platform_id platform_id = NULL;691 ret = clGetPlatformIDs(1,&platform_id,NULL);692if(ret != CL_SUCCESS){693 printf("clGetPlatformIDs Error2\n");694return -1;695 }696697// OpenCL部分 =============== 2 获得设备698 cl_uint num_devices;699 ret = clGetDeviceIDs(platform_id,CL_DEVICE_TYPE_GPU,0,NULL,700 &num_devices);701if(ret != CL_SUCCESS || num_devices < 1){702 printf("clGetDeviceIDs Error\n");703return -1;704 }705 cl_device_id device_id;706 ret = clGetDeviceIDs(platform_id,CL_DEVICE_TYPE_GPU,1,&device_id,NULL);707if(ret != CL_SUCCESS){708 printf("clGetDeviceIDs Error2\n");709return -1;710 }711712// OpenCL部分 =============== 3 创建Context713 cl_context_properties props[] = {CL_CONTEXT_PLATFORM,714 (cl_context_properties)platform_id,0};715 cl_context context = NULL;716 context = clCreateContext(props,1,&device_id,NULL,NULL,&ret);717if(ret != CL_SUCCESS || context == NULL){718 printf("clCreateContext Error\n");719return -1;720 }721722// OpenCL部分 =============== 4 创建Command Queue723 cl_command_queue command_queue = NULL;724 command_queue = clCreateCommandQueue(context,device_id,0,&ret);725if(ret != CL_SUCCESS || command_queue == NULL){726 printf("clCreateCommandQueue Error\n");727return -1;728 }729730// OpenCL部分 =============== 6 创建编译Program731const char *strfile = "D:\\PIE3\\src\\Test\\TextOpecCLResample\\TextOpecCLResample\\Co_occurrenceMatrixKernel.txt"; 732 size_t lenSource = 0;733char *kernelSource = LoadProgSource(strfile,"",&lenSource);734 cl_program *programs = (cl_program *)malloc(loopNum*sizeof(cl_program));735 memset(programs,0,sizeof(cl_program)*loopNum);736737 cl_kernel *kernels = (cl_kernel*)malloc(loopNum*sizeof(cl_kernel));738 memset(kernels,0,sizeof(cl_kernel)*loopNum);739740int startR = 0;741for(int i = 0;i<loopNum;i++)742 {743int tmpRowNum = iNumRow;744if(startR < 0)745 {746 startR = 0;747 }748int endR = startR + tmpRowNum - 1;749if(endR > m_iHeigth -1 ){750 endR = m_iHeigth -1;751 tmpRowNum = endR - startR + 1;752 }753 unsigned char *readBuff = new unsigned char[tmpRowNum*m_iWidth*m_iBandCount];754float *writeBuff = new float[m_iWidth*m_iBandCount*(tmpRowNum - overloadPix)];756 tmpRowNum,GDT_Byte,m_iBandCount,m_BandMap,nPixSpace,nLineSpace,nBandSpace);757758// OpenCL部分 =============== 5 创建Memory Object759 cl_mem mem_read = NULL;760 mem_read = clCreateBuffer(context,CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,761sizeof(cl_uchar)*tmpRowNum*m_iWidth*m_iBandCount,readBuff,&ret);762if(ret != CL_SUCCESS || NULL == mem_read){763 printf("clCreateBuffer Error\n");764return -1;765 }766767 cl_mem mem_write = NULL;768 mem_write = clCreateBuffer(context,CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,769sizeof(cl_float)*m_iWidth*m_iBandCount*(tmpRowNum - overloadPix),writeBuff,&ret);770if(ret != CL_SUCCESS || NULL == mem_write){771 printf("clCreateBuffer Error\n");772return -1;773 }774775// OpenCL部分 =============== 6 创建编译Program776//const char *strfile = "D:\\PIE3\\src\\Test\\TextOpecCLResample\\TextOpecCLResample\\Co_occurrenceMatrixKernel.txt"; 777//size_t lenSource = 0;778//char *kernelSource = LoadProgSource(strfile,"",&lenSource);779//cl_program program = NULL;780 programs[i] = clCreateProgramWithSource(context,1,(const char**)&kernelSource,781 NULL,&ret);782if(ret != CL_SUCCESS || NULL == programs[i]){783 printf("clCreateProgramWithSource Error\n");784return -1;785 }786 ret = clBuildProgram(programs[i],1,&device_id,NULL,NULL,NULL);787if(ret != CL_SUCCESS){788char* build_log;789 size_t log_size;790//查询⽇志的⼤⼩791 clGetProgramBuildInfo(programs[i], device_id, CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size);792 build_log = new char[log_size+1];793//获得编译⽇志信息794 ret = clGetProgramBuildInfo(programs[i], device_id, CL_PROGRAM_BUILD_LOG, log_size, build_log, NULL);795 build_log[log_size] = '\0';796 printf("%s\n",build_log);797 printf("编译失败!");798delete []build_log;799return -1;800 }801802// OpenCL部分 =============== 7 创建Kernel803//cl_kernel kernel = NULL;804 kernels[i] = clCreateKernel(programs[i],"Co_occurrenceMatrixKernel",&ret);805if(ret != CL_SUCCESS || NULL == kernels[i]){806 printf("clCreateProgramWithSource Error\n");807return -1;808 }809810// OpenCL部分 =============== 8 设置Kernel参数811 ret = clSetKernelArg(kernels[i],0,sizeof(cl_mem),&mem_read);812 ret |= clSetKernelArg(kernels[i],1,sizeof(cl_mem),&mem_write);813 ret |= clSetKernelArg(kernels[i],2,sizeof(cl_int),&m_iHeigth);814 ret |= clSetKernelArg(kernels[i],3,sizeof(cl_int),&m_iWidth);815 ret |= clSetKernelArg(kernels[i],4,sizeof(cl_int),&m_iBandCount);816 ret |= clSetKernelArg(kernels[i],5,sizeof(cl_int),&tmpRowNum);817 ret |= clSetKernelArg(kernels[i],6,sizeof(cl_int),&overloadPix);818 ret |= clSetKernelArg(kernels[i],7,sizeof(cl_int),&m_grayLevel);819 ret |= clSetKernelArg(kernels[i],8,sizeof(cl_int),&m_winHeigth);820 ret |= clSetKernelArg(kernels[i],9,sizeof(cl_int),&m_winWidth);821 ret |= clSetKernelArg(kernels[i],10,sizeof(cl_int),&m_dis);822 ret |= clSetKernelArg(kernels[i],11,sizeof(cl_int),&m_AngleMode);823 ret |= clSetKernelArg(kernels[i],12,sizeof(cl_int),&m_TextureMode);824if(ret != CL_SUCCESS){825 printf("clSetKernelArg Error\n");826return -1;827 }828829// OpenCL部分 =============== 9 设置Group Size830 cl_uint work_dim = 2;831 size_t global_work_size[] = {m_iWidth,tmpRowNum};832 size_t *local_work_size = NULL;833834// OpenCL部分 =============== 10 执⾏内核835 ret = clEnqueueNDRangeKernel(command_queue,kernels[i],work_dim,NULL,global_work_size,836 local_work_size,0,NULL,NULL);837 ret |= clFinish(command_queue);838if(ret != CL_SUCCESS){839 printf("clEnqueueNDRangeKernel Error\n");840return -1;841 }842843 writeBuff = (float*)clEnqueueMapBuffer(command_queue,mem_write,CL_TRUE,CL_MAP_READ | CL_MAP_WRITE, 8440,sizeof(cl_float)*m_iWidth*m_iBandCount*(tmpRowNum - overloadPix),0,NULL,NULL,&ret);845//ret = clEnqueueReadBuffer(command_queue,mem_resample,CL_TRUE,0,846// sizeof(cl_float)*tmpRowNum*resampleWidth*mssBandCount,(void*)resampleBuf,0,NULL,NULL);847if(ret != CL_SUCCESS){848 printf("clEnqueueMapBuffer Error\n");。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

r )colf ni n et c ne n ai fra c, U , u o 2 11 1 Sho o vom n Si c adS t ln m ts C MT X z u 2 6 E r e p aI o i h 1

l ha nr n deno K bay r nE im t d I CnUvio ignThl ,e ar ro a vn n nl i is f i a co y y ot d no e a 2 ) et M n y g L of L r D0rotno B ,u。 2 1 i Mnr S M Xh 16 s ii f S z“2 1 s og j
中 图分 类号 :2 8 P2
文献标 识码 : A
S AR M AGE I CHANGE DETECTI oN ETHoDS M BAS D E oN GLCM TEXTURE FEAT URES
Ha i g' .De gKah n a d L ih n nJ n n z o g' n i Bec e g’
to fn l o a ei wi h h ng ee to e ut s d O hepie r y c l a u .Th e tp o e h tt e in, al c mp r t t t e c a e d t cin r s l ba e f t x lg a s ae v l e i y h s e t s r v d t a h c a g ee to t o a e n GLCM e tr e tr sh st e lwe as lr r t h n e d tci n me h d b s d o txu e fau e a h o rf le aa m ae,t e lwe si g r t h o rmisn ae,t e h
第 3 卷 第4 2 期
201 2年 8月
大 地 测 量 与 地 球 动 力 学
J RNAL O OD S AND GE OU F GE E Y ODY NAMI S C
V0 . 132 No. 4
Aug 201 ., 2
文章 编号 :6 15 4 (0 2 0 -0 40 17 —9 2 2 1 ) 40 9 -5
wt xett nm xm m ( M)a oi m,adte s B ys nmii u r r a xrc ca g fr — i ep c i ai u E h ao l rh g t n nue aei nm m er t t et t h nei oma h a o re o a n
u i g t xu e fa u e xr ci n o AR ma e a e n g a e e O o u r n e marx,t n lz h rn i l f sn e t r e t r se ta to fS i g sb s d o r y l v lC — c re c t i o a ay e t e p c p eo i t e GL h CM , f au e e tr a d h c r ce it paa tr d t r n d, o a tmi r t o e ao c nsr ce e t r v c os n t e haa t rsi c r me e s ee mie lg r h c ai p r tr o tu t d i o d fee c ma e ifr n e i g s,we ma e t ifr n e i g sb s d o h o ta ta h a e o h n e d tci n.Ast e i d hed fe e c ma e a e n t e c nr s st e b s fc a g e e to h m— a e n a c r a c t he Ga s in mi t e mo e ,S si t he p r mee so h u sa x u e mo l g si c o d n e wih t u sa xur d l O we e tma e t a a tr ft e Ga si n mit r de
Ab t a t T eat0s on ie n ei ae ae nt 0 t s cns n u hn e f m t nb t r s r c h uh r fu ddf r e 1gs sdo ecnr t a t dot agdi o a 0 et fe n b h a a c nr i e
摘 要 利用灰度共生矩阵提取 S R影像的纹理特征, A 分析灰度共生矩阵的原理、 特征向量以及特征参数的确
定 。利用对数 比值算子构造差异影像 , 通过 比较发现基于反差 的差异影像更能 突出变化信息 。选择基 于反差 的差
异影像作为变化检测的基准, 由于其影像符合高斯混合模型, 利用期望最大(M) E 算法对高斯混合模型进行参数估
基 于灰 度 共 生矩 阵纹 理 特征 的 S AR 影 像 变 化 检 测 方 法 研 究
韩 晶 邓喀 中 , 李北城 ’ ’
2 1 1 2 16 、
/ ) 国 矿业 大学 环境 与测 绘 学 院 徐 州 1中
\) 2 中国矿业 大学 国土环境 与灾 害监测 国家测绘局重点实验室 , 徐州 2 11 / 216
计 。最后利用贝叶斯最小错误率进行变化信息的提取 , 与基 于像元 灰度值 的变 化检测结 果进行 比较 , 验证 明基 试 于灰度共生矩阵纹理特征的变化检测方法虚警 率更 低 、 漏检率更低 、 总体误差更小 ,A 灰度共生矩阵 ; 期望最大算法 ; 贝叶斯最小错误率 ; 变化信息提取
相关文档
最新文档