(一)模式识别——基于SVM的道路分割实验(附资源)

写在前面:本报告所有代码公开在附带资源中,无法下载代码资源的伙伴私信留下邮箱,小编24小时内回复

一、实验目的

1、实验目标

        学习掌握SVM(Support Vector Machine)算法思想,利用MATLAB的特定工具箱和库函数,实现对特定图像的道路分割。同时通过本实验过程理解处理各种数据分析问题的一般思想,包括数据预处理、模型选择、模型评估和参数优化等。

2、实验涉及到的学习内容

        SVM的分类思想,超平面(Hyperplane)、边际(Margin)、支持向量(Support Vectors)、核技巧(Kernel Trick)、软间隔(Soft Margin)等相关概念及其在分类处理中的作用,二次规划在求解SVM超平面中的使用。

二、实验具体完成情况

1、总体实验方案

        首先对所需要图片素材进行读取,在MATLAB中将图片的RGB值作为样本,用鼠标左右键区分正负样本。完成样本采集后将样本和样本标签同时传入封装的求解函数,返回得到分割超平面的wb值,根据该值构建超平面方程wx+b,将后续的测试集数据带入该方程比较所得数值与1的大小关系,数值大于1则被打上正标签。最后遍历所有测试集数据,根据其标签类别,对图像进行二值化,从而得到道路与背景的分割图。

2、具体技术途径

(1)数据收集和准备

        选择包含道路和非道路区域的图像。标记图像,将道路区域与非道路区域进行标注。标注的数据根据是否为道路区分正负样本,并分别以1和-1作为标签标记。

(2)特征提取

        从图像中提取特征以用于SVM训练和预测,本实验采用的特征样本点的RGB数值。

(3)模型训练

        使用训练集中的样本点对应的RGB值组成的向量来训练SVM模型。SVM的目标是找到一个最优的决策边界,以将道路和非道路区域分开。求解最优决策超平面过程中,采用了原空间求解和对偶空间求解2种方式,均用到了MATLAB的quadprog函数。

a.原空间求解法:

        原空间下的目标函数和不等式约束为如下表达式。

        根据MATLAB中的quadprog函数进行求解,可将[1]式表示为公式[2]中的二次规划问题。

        对比[1]与[2]式,构建输入参数HfA、b如下:

由quadprog可解得u,根据结果构建可得到w,b0

b.对偶空间求解法

        在对空间中,原问题经过对偶转换成如下的二次规划问题:

        根据式[2]构造相关参数如下:

        调用quadprog可解得最优的w*,从而问题中对wb0的求解有:

核函数求解

        利用核函数求解非线性支持向量机时,其实也是针对在对偶空间中的目标函数进行二次规划求解,核函数法利用一些特定的核函数来代替求解内积,所以目标函数可以化成:

其中核函数常见形式如下:

        首先得到支持向量机求解的原始问题模型,接着通过构造拉格朗如函数构造出一个问题,我们利用拉格朗日对偶原理,求解这个问题的对偶问题,实现对问题的求解。

(4)预测道路区域

        当模型经过评估并认为性能足够好时,可以将其用于新的图像来预测道路区域。

        将图像的特征提取出来,然后使用SVM模型进行预测,以确定每个像素是否属于道路。

(5)可视化结果

        将道路分割结果叠加到原始图像上,以便可视化道路的位置。

3、实验结果与分析

        a.通过使用MATLAB的quadprog函数,分别在线性核函数下对原空间和对偶空间的求解进行分析。

        正负样本点随机取10对的情况下,可以看出,两种方式分割效果都不够理想。其不管是原空间还是对偶空间求解分割出的道路轮廓差异均较大,呈现出较多“噪点”,道路面积明显小于实际。

图1 原空间下10对样本点分割结果           图2 对偶空间下10对样本点分割结果

      再次选择10对正负样本点,在特征足够明显的区域选择样本,并且尝试同一类型样本点适当的涵盖该的不同特征,得到下图。可看出原空间求解和对偶空间求解得到的效果类似。其中原空间求解得到的结果道路区域分割得更准确,对偶空间求解分割得到的道路区域夹杂的“噪点”略多。

图3 原空间下10对样本点分割结果           图4对偶空间下10对样本点分割结果

        增加样本点数量,取30对随机样本点,发现分割效果不如第二次的实验结果。其中原空间求解的结果略有倒退,对偶空间的结果有一定改善。为了验证是否因为偶然因素导致的情况,持续进行多次30组随机样本的测试。

图5 原空间下30对样本点分割结果           图6 对偶空间下30对样本点分割结果

        经过多次尝试取30对样本,发现大部分情况可以取得较好的效果,少数情况下分割效果会倒退,其中取得较好分割效果时的情况如图所示。不管是原空间还是对偶空间,对道路中心区域的分割效果相比第一次实验结果有着明显改善,但是边缘区域的分割效果改善效果不明显。

图7 原空间下30对样本点分割结果           图8 对偶空间下30对样本点分割结果

        分析:线性核函数下,从使用二次规划对原空间和对偶空间求解得到的结果可以看出,样本点的数量多少会一定程度影响到分割结果,但不是决定性因素,最终影响分割效果的是样本质量,直接决定了支持向量的优劣。同时,线性和函数下,对偶空间求解对比原空间求解并不能取得明显的优势,有时甚至处于劣势。

        b.通过使用MATLAB的quadprog函数在原空间(线性核函数)下求解,使用svc库函数在对偶空间(尝试不同核函数)下求解。

图9 原空间linear核                         图10 对偶空间linear核

图11 对偶空间rbf核                         图12 对偶空间erbf核

        分析:本次测试的样本特征维度为3维,维度较低,使用线性核的结果优于非线性核。原因可能是使用非线性核时,核函数将特征映射到更高维空间后不一定会使超平面划分变得更容易,若参数不好,反而会使问题复杂化,得到不及线性核的结果。

        c.从a和b部分的实验可以看出,使用硬间隔支持向量机时,由于道路与背景无可避免的存在一些特征非常接近的样本点,导致输出的图像存在不同程度的“噪声”。下面,在实验b的基础上将svc库函数引入软间隔,得到如下结果。

图13 原空间linear核                         图14 对偶空间linear核

图15 对偶空间rbf核                         图16 对偶空间erbf核

        分析:引入软间隔后,可见非线性支持向量机的性能明显改善,道路内部的“噪声”明显减少,但未完全消除,道路边缘的分割准确度略有下降。可见引入软间隔带来提升的同时也会下降边缘检测性能。

        d.根据前面实验,发现无论是采用非线性核,还是引入软间隔,都只能提升分割性能,而不能确保分割结果100%准确。针对此情况,可以结合计算机图像处理技术,对图形进行一些形态学操作,消除噪点并对边缘进行平滑操作。下面使用MATLAB对图像进行形态学操作,大致逻辑如下,首先将原图像进行腐蚀+膨胀操作去除背景噪声,然后通过膨胀+腐蚀去除主体(路面)噪声,最后先后求取主体和背景的最大连通域,得到最终分割效果,如图所示。

图17 形态学处理流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码 1 比赛时间 北京时间:2024年9月5日 18:00-2024年9月8日20:00 2 思路内容 2.1 往届比赛资料 【2022高教社杯数学建模】C题:古代玻璃制品的成分分析与鉴别方案…

AI学习记录 - 旋转位置编码

创作不易,有用点赞,写作有利于锻炼一门新的技能,有很大一部分是我自己总结的新视角 1、前置条件:要理解旋转位置编码前,要熟悉自注意力机制,否则很难看得懂,在我的系列文章中有对自注意力机制的…

2409d,d语言非常简单利用sqlite3库

1,在sqlite3d.c中 #include "sqlite3.h"2,直接使用了: import std.conv; import std.stdio; import std.string;import sqlite3d;extern(C) {static int callback(void *NotUsed, int argc, char **argv, char **azColName){int i;for(i0; i<argc; i){printf(&q…

OpenFeign请求拦截器,注入配置属性类(@ConfigurationProperties),添加配置文件(yml)中的token到请求头

一、需求 OpenFeign请求拦截器&#xff0c;注入配置属性类&#xff08;ConfigurationProperties&#xff09;&#xff0c;添加配置文件&#xff08;yml&#xff09;中的token到请求头 在使用Spring Boot结合OpenFeign进行微服务间调用时&#xff0c;需要在发起HTTP请求时添加一…

MLLM(二)| 阿里开源视频理解大模型:Qwen2-VL

2024年8月29日&#xff0c;阿里发布了 Qwen2-VL&#xff01;Qwen2-VL 是基于 Qwen2 的最新视觉语言大模型。与 Qwen-VL 相比&#xff0c;Qwen2-VL 具有以下能力&#xff1a; SoTA对各种分辨率和比例的图像的理解&#xff1a;Qwen2-VL在视觉理解基准上达到了最先进的性能&#…

kafka单机安装

kafka单机安装 下载地址 官网&#xff1a;https://kafka.apache.org/最新版本下载页面&#xff1a;https://kafka.apache.org/downloads 说明 版本选择&#xff1a;3.0.0&#xff0c;kafka_2.12-3.0.0.tgz下载地址&#xff1a;https://archive.apache.org/dist/kafka/3.0.0…

018、二级Java操作题汇总最新版100000+字

目录 1.基本操作&#xff08;源代码&#xff09;&#xff1a; 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.…

ClickHouse 的安装与基本配置

ClickHouse 是一款高性能的列式数据库管理系统&#xff0c;特别适合用于大数据分析。以下是 ClickHouse 的安装与基本配置步骤&#xff0c;涵盖了在常见平台&#xff08;如 Linux&#xff09;上的安装和基础配置。 1. 安装 ClickHouse 在 Linux (Ubuntu/Debian) 上安装 在 U…

Apache Guacamole 安装及配置VNC远程桌面控制

文章目录 官网简介支持多种协议无插件浏览器访问配置和管理应用场景 Podman 部署 Apache Guacamole拉取 docker 镜像docker-compose.yml部署 PostgreSQL生成 initdb.sql 脚本部署 guacamole Guacamole 基本用法配置 VNC 连接 Mac 电脑开启自带的 VNC 服务 官网 https://guacam…

Gmtracker安装中存在的问题

Gmtracker安装中存在的问题 GMtracker安装问题该如何解决&#xff1f; 使用用服务器&#xff0c;在云服务器中使用conda环境 python 3.6的版本环境. pip install -r requirements.txt 在网上查找资料&#xff1a;opencv安装失败卡在这里是因为没有使用高版本的python环境 切换…

MySQL灾难恢复策略:构建稳健的备份与恢复机制

在现代企业环境中&#xff0c;数据的安全性和可靠性至关重要。灾难恢复计划&#xff08;Disaster Recovery Plan, DRP&#xff09;是确保在发生灾难性事件后&#xff0c;能够迅速恢复业务的关键策略。对于依赖MySQL数据库的系统&#xff0c;实现有效的灾难恢复计划尤为重要。本…

流式域套接字通信

流式域套接字服务器端实现&#xff08;TCP&#xff09; #include <myhead.h>#define BACKLOG 5 int main(int argc, const char *argv[]) {int oldfdsocket(AF_UNIX,SOCK_STREAM,0);if(oldfd-1){perror("socket");return -1;}if(access("./server",…

pdf在线转换成word免费版,一键免费转换

在日常的学习和办公中&#xff0c;PDF文件和Word文档是我们离不开的两种最常见的文件&#xff0c;而PDF与Word文档之间的转换成为了我们日常工作中不可或缺的一部分。无论是为了编辑、修改还是共享文件&#xff0c;掌握多种PDF转Word的方法都显得尤为重要。很多小伙伴关心能不能…

摄像头的ISP和SOC的GPU有区别吗?

摄像头的主芯片必须包含ISP&#xff0c;也就是图像处理器核心。而SOC的GPU或者说显卡也包含图像处理器也就是GPU。两者并无本质区别&#xff0c;都是实现数字图像处理算法。同样的用FPGA做内窥镜图像处理和用FPGA做显示图像处理器本质上也是一样的。 当然两者存在一些细微差别…

Flask中 blinker 是什么

在Flask框架中&#xff0c;blinker 是一个非常重要的组件&#xff0c;它作为信号处理的库&#xff0c;为Flask应用提供了一种灵活而强大的事件处理机制。以下是对Flask中blinker的详细阐述&#xff0c;考虑到篇幅限制&#xff0c;无法直接达到5000字&#xff0c;但会尽量全面而…

SpringSecurity Oauth2 - 密码模式完成身份认证获取令牌 [自定义UserDetailsService]

文章目录 1. 授权服务器2. 授权类型1. Password (密码模式)2. Refresh Token&#xff08;刷新令牌&#xff09;3. Client Credentials&#xff08;客户端凭证模式&#xff09; 3. AuthorizationServerConfigurerAdapter4. 自定义 TokenStore 管理令牌1. TokenStore 的作用2. Cu…

Ajax 2024/3/31

Ajax 异步的Javascript和XML 作用&#xff1a; 数据交换&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 异步交互&#xff1a;可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的技术。 原生Ajax 1.准备数据…

看demo学算法之 贝叶斯网络

大家好&#xff0c;这里是小琳AI课堂&#xff01;今天我们一起来学习贝叶斯网络&#xff0c;这是一种非常酷的图形模型&#xff0c;它能帮助我们理解和处理变量之间的条件依赖关系。&#x1f3a8;&#x1f4ca; 贝叶斯网络基础 首先&#xff0c;贝叶斯网络是基于贝叶斯定理的…

springweb获取请求数据、spring中拦截器

SpringWeb获取请求数据 springWeb支持多种类型的请求参数进行封装 1、使用HttpServletRequest对象接收 PostMapping(path "/login")//post请求//spring自动注入public String login(HttpServletRequest request){ System.out.println(request.getParameter("…

C++基础知识(五)

struct VS class 特性structclass默认访问修饰符publicprivate成员访问权限成员默认是 public成员默认是 private继承方式默认继承方式为 public默认继承方式为 private用途通常用于简单的数据结构或记录通常用于复杂的数据类型和封装成员函数可以有成员函数可以有成员函数构造…