envi最大似然分类_ENVI 自带的6种遥感图像分类算法比较

本文通过实验比较了ENVI平台上的六种遥感图像分类方法,包括最大似然法、最小距离法等。结果显示,最大似然法在精度和计算时间上表现出色,适合中低分辨率多光谱图像分类。支持向量机法精度最高,但计算时间较长。各方法各有优劣,适用于不同场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述:

基于 ENVI 平台,利用该平台自带的 Landsat tm5 多光谱遥感图像作为数据源,进行监督分类应用实验,并对其分类结果进行精度比较,结果表明:6 种监督分类方法中最大似然法分类精度较高,且计算时间相对较短,更普遍适合

中低分辨率多光谱遥感图像分类工作。根据具体需求,同学们可以选择自己合适的分类方法。

方法:

监督分类主要分为平行六面体分类法、最小距离分类法、马氏距离分类法、最大似然分类法、神经网络分类法、支持向量机分类法。

数据与实验

 实验数据。本文以 ENVI 自带的 Landsat tm5数据 Can_tmr.img 多光谱遥感图像作为主要数据源,以波段 5,4,3 模拟真彩色图像合成 RGB 进行显示,根据图像的光谱特征,通过人工判读把图像中的地物分为林地、草地、耕地、裸地、沙地、水体6 类,见图 1。通过绘制多边形感兴趣区进行训练样本选取,并对每类地物的感兴趣区用不同颜色加以区分。

ecb86ce6356edc2d83d0dccff748d983.png

                                图1  原始影像

分类实验。创建 6 类感兴趣区分别为林地、草地、耕地、裸地、沙地、水体,并以此定义训练样本。各个样本类型之间的可分离性,用 Jeffries-Matusita 距离和转换分离度参数表示,根据可分离性值的大小,从小到大列出感兴趣区组合。这两个参数的值在 0~2.0 之间,大于 1.9 说明样本之间可

分离性好,属于合格样本;小于 1.8,需重新选择样本。训练样本可分离性计算报表见表 1,可见各样本分离性均在 1.9 以上,说明各类感兴趣区分离性较好,选择该感兴趣区作为训练样本较为合适。

20cd230c3638a9d25911fbff5c34e941.png

a3b8d0f183137a059d9ccb9a6043f2d4.png

图2 平行六面体分类结果

a3b8d0f183137a059d9ccb9a6043f2d4.png

图3最大似然分类结果

a3b8d0f183137a059d9ccb9a6043f2d4.png

图4 最小距离分类结果

a3b8d0f183137a059d9ccb9a6043f2d4.png

图5 马式距离分类结果

a3b8d0f183137a059d9ccb9a6043f2d4.png

图6 神经网络分类结果

a3b8d0f183137a059d9ccb9a6043f2d4.png

图7 支持向量机分类结果

结果精度分析

29930233a02b9cec30875415d99d72c5.png

    1)平行六面体法的总体分类精度为71.8877%, Kappa系数为0.6650,计算时间为5s;最大似然法的总体分类精度为93.8321% ,Kappa系数为0.9302,计算时间为3s;最小距离法的总体分类精度为80.4378% , Kappa系数为0.7976 ,计算时间为35;马氏距离法的总体分类精度为77.2475%, Kappa系数为0.7538,计算时间为4 s;神经网络法的总体分类精度为96.918 8% ,  Kappa系数为0.9543,计算时间为20s;支持向量机法的总体分类精度为97.5391 % , Kappa系数为 0.9647 ,计算时间为7s 。

3cad186b1456128f71de8685f96e5b74.png

2)6 种分类方法中支持向量机法具有最高的分类精度,分类效果最好,能够较为准确地提取目标地物,但计算时间较长;平行六面体法分类精度最低,效果最差,得到的结果容易出现重叠,混淆不清的结果,但算法较为简单,计算时间也短。

3)最大似然法和神经网络法也具有较高的分类精度,其中最大似然法计算时间较短,神经网络法计算时间相比于其他 5 种分类法均较长。

4)最小距离法和马氏距离法的精度并不是很高,其中最小距离法容易出现大面积没有被分类成果的区域,但该算法较为简单,且计算时间较短。

5)针对本文采用的中低分辨率多光谱数据,6 种分类方法的计算时间均可在 20 s 之内完成,较为短暂。但因在实际应用中遥感数据的类型及大小不同,使用不同分类方法计算时具体计算时间会有所差异。

### 最大似然分类算法在遥感数据中的应用 最大似然分类(Maximum Likelihood Classification, MLC)是一种基于概率统计的方,用于将像素分配到最可能的类别中。该方假设每类数据服从正态分布,并通过计算每个像元属于各个类别的条件概率来决定其归属。 以下是使用Python实现MLC的主要过程: #### 数据准备 为了执行最大似然分类,通常需要以下输入: - 训练样本:这些是从已知类别中标记的数据点。 - 遥感影像:这是要分类的目标图像。 可以利用 `numpy` 和 `scikit-learn` 库完成此任务[^1]。 ```python import numpy as np from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.model_selection import train_test_split from scipy.stats import multivariate_normal ``` #### 实现步骤详解 ##### 1. 加载训练数据和测试数据 加载遥感影像及其对应的标签作为训练集和验证集的一部分。这里我们随机分割数据以便于模型评估。 ```python # 假设 X 是特征矩阵 (n_samples, n_features),y 是对应标签向量 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) ``` ##### 2. 构建高斯分布模型 对于每一类数据,估计均值向量和协方差矩阵。这可以通过 `multivariate_normal` 函数轻松实现。 ```python def estimate_gaussian_parameters(data): mean_vector = np.mean(data, axis=0) covariance_matrix = np.cov(data.T) return mean_vector, covariance_matrix class_models = {} unique_classes = np.unique(y_train) for class_label in unique_classes: class_data = X_train[y_train == class_label] mean, cov = estimate_gaussian_parameters(class_data) class_models[class_label] = {'mean': mean, 'cov': cov} ``` ##### 3. 定义预测函数 给定一个新的观测值,我们需要计算它属于每一个类的概率密度值并选取最大的那个。 ```python def predict_class(sample, models): max_prob = -np.inf predicted_class = None for label, model in models.items(): prob_density = multivariate_normal.pdf(sample, mean=model['mean'], cov=model['cov']) if prob_density > max_prob: max_prob = prob_density predicted_class = label return predicted_class predictions = [] for sample in X_test: predictions.append(predict_class(sample, class_models)) accuracy = np.sum(np.array(predictions) == y_test) / len(y_test) print(f'Accuracy of the classifier is {accuracy * 100:.2f}%') ``` 上述代码展示了如何手动构建一个简单的最大似然分类器。然而,在实际项目中推荐直接调用成熟的库如 `sklearn`. --- ### 使用 Spatial Pyramid Matching 的扩展功能 如果希望进一步提升分类效果,可考虑引入空间金字塔匹配技术以增强局部模式识别能力。这种方能够捕捉不同尺度下的纹理特性,从而提高整体性能。 ```python from skimage.feature import local_binary_pattern from sklearn.cluster import MiniBatchKMeans # 提取 LBP 特征 lbp_radius = 3 num_points = 8 * lbp_radius lbp_method = 'uniform' lbp_images = [local_binary_pattern(image_band, num_points, lbp_radius, method=lbp_method) for image_band in bands] # 聚类生成视觉词典 kmeans_model = MiniBatchKMeans(n_clusters=50, random_state=42).fit(lbp_images.ravel().reshape(-1, 1)) histograms_per_image = [] for img in lbp_images: labels = kmeans_model.predict(img.ravel().reshape(-1, 1)) hist, _ = np.histogram(labels, bins=np.arange(kmeans_model.n_clusters + 1), density=True) histograms_per_image.append(hist) # 将直方图附加至原始特征上形成新的表示形式 enhanced_X_train = np.hstack([X_train, histograms_per_image]) ``` 以上片段说明了如何结合LBP描述符与聚类分析创建更丰富的特征表达方式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值