基于SVM的道路二值分割问题——原空间中求解(MATLAB)

基于SVM的道路二值分割问题——在原空间中求解

最近做了一个关于使用支持向量机对道路图像进行二值分割的实验,要求在原空间中求解支持向量,有所收获,想记录下来。所以第一次写,有所不足,还请大家理解,相信后面会越来越好的。

支持向量机在原空间中的问题表示

相信大家都至少对支持向量机有基本的了解,在这里就不再赘述各种理论和推导步骤,直接给出在原空间中的目标函数和不等式约束,如下:
支持向量机在原空间中的问题描述
该问题是个凸二次规划问题,可以利用MATLAB中的quadprog()函数进行求解。

quadprog()函数介绍

在MATLAB中有专门解决二次规划问题的quadprog()函数,在原空间中求解支持向量机必定要用到它,因此在这里对其进行介绍。
首先,我们看MATLAB help文档中对quadprog()函数调用方式的介绍:
quadprog()函数的调用方式
然后,再看此函数解决的二次规划问题描述形式,如下:
二次规划问题标准表示形式
从以上可以发现,我们要解决二次规划问题,就要按照这个标准形式进行转换,从而能够构建出调用quadprog()函数所使用的输入参数H、f、A、b等等。所以下面将进行具体的描述形式转换,即构建相应的矩阵参数。

构建矩阵参数

在原空间中的目标函数需要求解两个量:w和b0。因此,对照二次规划的标准形式,可以进行以下的转换:
原空间中求解过程

编程实现

下面是相应的程序:

function [w,b0] = svc_original(train_data,train_label)
%%函数功能:在原空间中利用MATLAB中的quadprog()函数求解凸二次规划问题
%输入:train_data:训练数据,在该问题中,是一个n*3的矩阵,列存储RGB%      train_label:训练标签,已知的分类标签,+1-1
%输出:w,b0:最优权向量
[n1,n2] = size(train_data);
%构建x = quadprog(H,f,A,b)中的H
%H是个前n2项对角线上为1,其余均为0H = zeros(n2+1,n2+1);
for i=1:n2
    for j=1:n2
        if (i==j)
            H(i,j) = 1;
        end
    end
end
%构建f矩阵
f = zeros(n2+1,1);
%构建A矩阵
A = zeros(n1,n2+1);
for i=1:n1
    A(i,:) = [-train_label(i)*train_data(i,:),-train_label(i)];
end
%构建b矩阵
b = -ones(n1,1);
%调用quadprog()函数
X = quadprog(H,f,A,b);
w = X(1:size(X,1)-1,:);
b0 = X(size(X,1),:);

效果展示

原空间中道路分割效果图

  • 16
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值