遥感影像分类之SVM

2023-11-15

目录

一、背景简介

二、环境介绍

三、分类步骤

3.1 训练数据预处理

3.2 导入相关扩展包

3.2 读取训练数据与训练标签

3.3 确定参数g和c

3.4 使用svm训练模型

3.5 使用模型进行分类

四、分类结果显示与保存

4.1 结果显示

4.2 结果保存

五、结果展示

六、误差分析


一、背景简介

遥感图像分类就是利用计算机通过对遥感图像中各类地物的光谱信息和空间信息进行分析,选择特征,将图像中各个像元按照某种规则或算法划分不同的类别,然后获得遥感图像中与实际地物的对应信息,从而实现图像的分类。遥感图像计算机分类的依据是遥感图像像素的相似度,常使用距离和相关系数来衡量相似度。常见的分类方法有:监督分类、非监督分类法。

在知网中以遥感影像分类为关键词搜索,可以看到遥感影像分类从2000年之后便引起了人们的广泛关注,特别是近10年以来,随着计算机技术的提高,遥感影像分类更是迎来了前所未有的发展。

其中,支持向量机就是属于监督学习的一类分类方法。

支持向量机 (SVM) 是一个类分类器,正式的定义是一个能够将不同类样本在样本空间分隔的超平面。 换句话说,给定一些标记(label)好的训练样本 (监督式学习), SVM算法输出一个最优化的分隔超平面。

二、环境介绍

在本次实验中,使用Python+libsvm实现遥感影像分类。主要环境为:Python3.7.3,Libsvm 3.20;

Python环境为:Pycharm+Anaconda

三、分类步骤

3.1 训练数据预处理

我们这里选择三个特征值作为训练数据,分别为:熵、能量、平均值,本次实验选择2类共计40条数据作为训练数据,处理完的数据格式如下:

其中第一列代表分类标签,这里分为两类,所以使用1和2作为区分;第2列、第三列和第四列分别为训练数据,1、2、3代表特征值个数,冒号后为特征值。注意:其中的训练数据不仅限于三个,数量越多,分类效果越好。

3.2 导入相关扩展包

from PIL import Image
import sys
path = "F:\Machine Learning\ML\libsvm-3.20\python"
sys.path.append(path)
from svmutil import *
import cv2

这里libsvm为官网下载,未安装,所以直接导入使用,也可使用安装好的扩展包

3.2 读取训练数据与训练标签

with open('train_data.txt', 'r') as f:
    for line in f:
        line = line.strip('\n')
        str = line.split(",")
        b= []
        for str1 in str:
             b.append(int(str1))
        #print(b)
        train_data.append(b)
with open('train_label.txt', 'r') as file:
    train_label=[]
    for lines in file:
        line = lines.strip('\n')
        train_label.append(int(line))

将训练数据与训练标签分别放入train_data与train_label

3.3 确定参数g和c

其中g为核函数的参数设置,c为边界参数。在libsvm中,提供了grid.py文件来确定g和c

3.4 使用svm训练模型

parameter = '-c 0.03125 -g 0.0001220703125'
model = svm_train(train_label, train_data, parameter)

3.5 使用模型进行分类

yt, xt = svm_read_problem('Testdata_all_test.txt')
p_label, p_acc, p_val = svm_predict(yt[0:], xt[0:], model)

在分类之后,分别将分类后的标签、精度、值分别放入了p_label, p_acc, p_val。

至此,分类已经结束。

四、分类结果显示与保存

4.1 结果显示

for p in range(0,img.shape[0]):
    for q in range(0, img.shape[1]):
        if int(p_label[n]) == 1:
            pixTuple = (230,230,255, int(p_label[n]))
            img_new.putpixel((q, p), pixTuple)
        if int(p_label[n]) == 2:
            pixTuple = (0,0,255, int(p_label[n]))
            img_new.putpixel((q, p), pixTuple)
        n=n+1
img_new.show()

这里使用p_label标签作为结果进行显示,若标签值为1,则颜色为浅灰色;若标签值为2,则颜色为蓝色。

4.2 结果保存

img_new.save("pic.png")

五、结果展示

下图为分类前后效果对比,可以看出,分类结果较为明显:

分类前:

分类后:

六、误差分析

此次分类结果出现误差主要有两个方面的因素:

一是训练样本的数量不足,影像共有1981*1331个像元,而训练集只选择了其中40个;二是SVM本身的误差。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

遥感影像分类之SVM 的相关文章

随机推荐

  • python copy()和deepcopy()解释(import copy)

    对于简单的 object 用 shallow copy 和 deep copy 没区别 复杂的 object 如 list 中套着 list 的情况 shallow copy 中的 子list 并未从原 object 真的 独立 出来 也就
  • 英语 面包为什么不可数?

    接下来我就来解释一下 因为首先面包的形态多种多样 不同的人就有不同的做法 有时候依据面包的形态很难界定面包到底是多少 个 其次面包通常不能直接出售 都要有包装的保护 同理 像蛋糕 巧克力 家具等 它们可以由创造者自由塑形 量化 又往往成一定
  • 金融区块链基础设施(浅析)

    想知道更多更多关于区块链技术知识 请百度 链客区块链技术问答社区 链客 有问必答 Optherium Labs是一家全球金融科技公司和区块链即服务提供商 是Linux Hyperledger和Crypto Valley基金会的成员 在欧盟获
  • SpringBoot使用Nacos动态配置数据源

    SpringBoot SpringCloud项目部署运行后 如果使用硬编码方式定义数据源 那么如果需要更换数据库 就只能通过更改源码并重启的方式来达成目的 而SpringCloud生态中有配置中心这一组件 我们可以将数据源连接属性编写在配置
  • centos7修改语言环境($LANG)

    文章目录 1 问题 2 系统环境 3 解决方案 1 问题 安装centos7系统时 我默认选择的是LANG zh CN UTF 8 在执行各种命令后 英文中掺杂的中文显得有点格格不入 于是我想要将语言环境改成全英文的 2 系统环境 root
  • vue(9):自定义指令

    自定义指令 除了默认设置的核心指令 v model 和 v show Vue 也允许注册自定义指令 示例 注册一个全局指令 v focus 该指令的功能是在页面加载时 元素获得焦点 div p 请输入 p div
  • Java8 Stream 之sorted方法 排序讲解

    本文主要讲解 Java 8 Stream之sorted 排序示例 使用java 8 的流式sorted排序List集合 Stream sorted 字段排序 功能说明 以自然序或着自定义Comparator 接口排序规则来排序一个流 功能详
  • Vue组件化开发

    一 组件基础 1 组件介绍 组件 是一个独立显示的视图单元 在构建大型应用时 我们通常会把可复用性强的部分 例如 头部导航 侧边栏等需要在多个页面展示的部分 提取出来 最终组合成一个完整的页面 在vue中 组件是可复用的vue实例 2 组件
  • SVG: draw text

  • 对比学习系列(二)---MoCo 系列

    MoCo 系列 文章目录 MoCo 系列 自监督 MoCo V1 前言 动量对比 Dictionary as a queue Momentum update 代理任务 Shuffling BN 实验 MoCo V2 MoCo V3 参考 自
  • Proteus 8.9原理图转换为PCB图

    Proteus 8 9原理图转换为PCB图 1 点击PCB设计图标 2 定义边界 在Board Edge图层建立矩形 此矩形内放置所有元器件 3 选用自动布局 Auto Placer 勾选所有器件 也可手动布置 没有的元器件封装可以重新选择
  • java初阶---类和对象

    一 类和类的实例化 1 类就是一类对象的统称 对象就是这一类具体化的一个实例 一个类可以实例化无数个对象 2 声明一个类就是创建一个新的数据类型 而类在java中属于引用类型 java使用关键字class来声明类 3 基本语法 创建类 cl
  • “Failed to initialize NVML

    Checking nvidia driver version with error Failed to initialize NVML GPU access blocked by the operating system 解决办法 360安
  • 最大的以1为边界的正方形--动态规划

    leetcode 1139 最大的以1为边界的正方形 题目描述 给你一个由若干 0 和 1 组成的二维网格 grid 请你找出边界全部由 1 组成的最大 正方形 子网格 并返回该子网格中的元素数量 如果不存在 则返回 0 示例1 输入 gr
  • Macbook Pro 鼠标卡顿问题

    Macbook Pro 鼠标卡顿问题 目前无解 只能改善 该问题最早能追溯到 2015年 https jingyan baidu com article ff42efa93632c5c19e220208 html 原因 据说是无线频段冲突
  • 手把手教会机器学习(一)——特征工程

    Python机器学习 一 特征工程 特征工程 特征 Feature 当建立预测模型时 用以对结构经行分析预判 且与预测对象有较大相关性的变量 特征提取 Feature Extraction 特征的提取应注意避免提取到相关含义的变量 避免提取
  • mysql基本语句:DML(数据操作语言)

    目录 DML语言 1 INSERT 添加数据语句 2 UPDATE 更新数据语句 3 SQL中的运算符 4 DELETE 删除数据语句 DML语言 DML 数据操作语言 用于操作数据库对象中所包含的数据 DML包括 INSERT 添加数据语
  • dbeaver对数据进行可视化编辑

    进入数据编辑界面 然后在操作栏上点击编辑即可看到
  • java学习路线

    Java 学习路线 Java 学习路线一条龙版 by 程序员鱼皮 建议先观看视频导读 https www bilibili com video BV1Qf4y1K7ff 大纲 路线特点 最新 完整一条龙的大厂 Java 学习路线 从入门到入
  • 遥感影像分类之SVM

    目录 一 背景简介 二 环境介绍 三 分类步骤 3 1 训练数据预处理 3 2 导入相关扩展包 3 2 读取训练数据与训练标签 3 3 确定参数g和c 3 4 使用svm训练模型 3 5 使用模型进行分类 四 分类结果显示与保存 4 1 结