当前位置: 首页 > news >正文

(一)模式识别——基于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 形态学处理流程

相关文章:

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

写在前面:本报告所有代码公开在附带资源中,无法下载代码资源的伙伴私信留下邮箱,小编24小时内回复 一、实验目的 1、实验目标 学习掌握SVM(Support Vector Machine)算法思想,利用MATLAB的特定工具箱和库函…...

Python | Leetcode Python题解之第391题完美矩形

题目: 题解: class Solution:def isRectangleCover(self, rectangles: List[List[int]]) -> bool:area, minX, minY, maxX, maxY 0, rectangles[0][0], rectangles[0][1], rectangles[0][2], rectangles[0][3]cnt defaultdict(int)for rect in rec…...

Rust模块std::thread

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust到底值不值得学,之一 -CSDN博客 Rust到底值不值得学,之二-CSDN博客 Rust多线程编程概述-CSDN博客 12.…...

Leetcode Day20 打家劫舍

198 最基础 class Solution:def rob(self, nums: List[int]) -> int:dp1 [0] * len(nums)dp2 [0] * len(nums)# dp1指第i天偷了, dp2指第i天没有偷dp1[0] nums[0]for i in range(1, len(nums)):dp1[i] dp2[i - 1] nums[i]dp2[i] max(dp1[i - 1], dp2[i - 1])return m…...

云计算之数据库

目录 一、RDS产品介绍及排障思路 1.1 云RDS数据库及其特点 1.2 云RDS数据库-规格 1.3 云RDS数据库-存储 ​1.4 云RDS数据库-安全 ​1.5 云RDS数据库-整体架构 1.6 RDS常见问题排查 ​1.6.1 如何解决无法链接RDS实例的问题 1.6.2 RDS实例存储空间使用率高,怎…...

开发软件,什么类型的重要信息的日志要存到数据库表里面

在开发软件时,选择将哪些类型的重要信息日志存储到数据库表里面,主要取决于这些日志的用途、查询需求、性能考虑以及系统架构。以下是一些通常会选择存储到数据库表中的重要信息日志类型: 1. 业务日志: 交易记录:记录…...

websocket和轮询的区别?

问: websocket和轮询的区别? 回答: WebSocket 和定时轮询(每隔几秒发送一次请求)是两种不同的实时通信方法,各有优缺点,适用于不同的场景。以下是它们的主要区别及适用场景: WebSo…...

2024 年全国大学生数学建模竞赛(国赛)浅析

需要完整资料,请关注WX:“小何数模”! (需要完整B、C和E题资料请关注WX:“小何数模”,获取资料链接!) 本次万众瞩目的全国大学生数学建模赛题已正式出炉,无论是赛题难度…...

持续集成与持续部署(CI/CD)的深入探讨

在现代软件开发中,持续集成(CI)和持续部署(CD)已成为不可或缺的实践。这些方法旨在加快软件交付的速度,同时提高软件的质量和稳定性。通过CI/CD,开发团队可以频繁地将代码更改集成到主分支&…...

hyperf json-rpc

安装 安装docker hyperf 安装 hyperf-rpc-server-v8 (服务端) docker run --name hyperf-rpc-server-v8 \ -v /www/docker/hyperf-rpc-server:/data/project \ -w /data/project \ -p 9508:9501 -it \ --privileged -u root \ --entrypoint /bin/sh \…...

基于SpringBoot的外卖点餐系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:SpringBootJSP 工具:IDEA/Eclipse、Navicat、Maven、Tomcat 系统展示 首页 用户管理界…...

网络编程day02(字节序、TCP编程)

目录 【1】字节序 1》大小端转换 2》端口转换 3》IP地址转换 主机字节序转换为网络字节序 (小端序->大端序) 网络字节序转换为主机字节序(大端序->小端序) 【2】TCP编程 1》流程 2》函数接口 1> socket 2> …...

萌新6:临场发挥(区间dp)

题目描述 小x和室友总共 nnn 人,组团去打一款游戏,总共有 nnn 台电脑供他们使用,一人一台,最开始,第 iii 个人使用第 iii 台电脑。 小x评估了每个人的能力值和临场发挥值。 第 iii 个人的能力值为 aia_iai​。 而他们…...

《数字信号处理》学习04-离散时间系统中的线性时不变系统

目录 一,系统及离散时间系统 二,离散时间系统中的线性时不变系统 1,线性系统 1) 可加性 2) 比例性(齐次性) 3)叠加原理(叠加性质) 2,时不变系统(移不变系统) 通过前几篇文章的学习,此时我对序列的相关概…...

ABAP 调试宏DEFINE

文章目录 调试过程完整程序 调试过程 完整程序 REPORT Z_TEST_DEFINE.TYPES: BEGIN OF GTY_DATA,NAME TYPE STRING,AGE TYPE I,END OF GTY_DATA. DATA: GS_DATA TYPE GTY_DATA,GT_DATA TYPE TABLE OF GTY_DATA. DEFINE D_TEST.GS_DATA-NAME &1.GS_DATA-AGE &2.APPE…...

Golang | Leetcode Golang题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; const mask1, mask2 1 << 7, 1<<7 | 1<<6func getBytes(num int) int {if num&mask1 0 {return 1}n : 0for mask : mask1; num&mask ! 0; mask >> 1 {nif n > 4 {return -1}}if n > 2 {return n}r…...

HarmonyOS开发实战( Beta5.0)DevEco Device Tool开发环境搭建实践

通常在嵌入式开发中&#xff0c;很多开发者习惯于使用Windows进行代码的编辑&#xff0c;比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段&#xff0c;大部分的开发板源码还不支持在Windows环境下进行编译&#xff0c;如Hi3516、Hi3518系列开发板。…...

WIFI贴项目到底是不是“骗局”呢?由我来揭秘!

各位亲爱的朋友们&#xff0c;大家好&#xff01;我是你们的老朋友鲸天科技千千&#xff0c;一直在这片互联网的热土上耕耘。相信你们对我都不会陌生&#xff0c;因为我常常分享一些互联网上的新奇项目和实用技巧。如果你对我的内容感兴趣&#xff0c;别忘了点个关注哦&#xf…...

C++ string类—string修饰符、操作、非成员函数

一、Modifiers&#xff08;修饰符&#xff09;&#xff1a; 1、operator 这个成员函数给一个string类类型的对象进行追加&#xff0c;在现有的string后面追加string类、字符串或者字符&#xff1b; 代码示例&#xff1a; void test1() {std::string s1("Hello ");…...

PVN3D(一)代码框架

在windows上配置pvn3d的环境一直配不成功&#xff0c;主要卡在了与C联合编译上&#xff0c;不知道如何处理了。索性先看看代码&#xff0c;竟然发现与论文中的代码对应上了。希望这一段时间把环境配置好。 1.论文中的网络结构 1.RGB图像特征&#xff0c;通过CNN提取特征。深度…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

验证redis数据结构

一、功能验证 1.验证redis的数据结构&#xff08;如字符串、列表、哈希、集合、有序集合等&#xff09;是否按照预期工作。 2、常见的数据结构验证方法&#xff1a; ①字符串&#xff08;string&#xff09; 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...