资源简介
基于SVM的RBG图像分割,对图像的前景与后景进行分割
代码片段和文件信息
%% Matlab神经网络43个案例分析
% 基于SVM的图像分割-真彩色图像分割
% by 李洋(faruto)
% http://www.matlabsky.com
% Email:faruto@163.com
% http://weibo.com/faruto
% http://blog.sina.com.cn/faruto
% 2013.01.01
%% A Little Clean Work
tic;
close all;
clear;
clc;
format compact;
%% 读取图像数据
% 读入图像,放在矩阵pic
pic = imread(‘littleduck.jpg‘);
% 查看矩阵pic的大小和类型
whos pic;
scrsz = get(0‘ScreenSize‘);
figure(‘Position‘[scrsz(3)*1/4 scrsz(4)*1/6 scrsz(3)*4/5 scrsz(4)]*3/4);
imshow(pic);
%% 确定训练集
TrainData_background = zeros(203‘double‘);
TrainData_foreground = zeros(203‘double‘);
% % 背景(湖水)采样
% msgbox(‘Please get 20 background samples(点击OK后再按任意键继续)‘ ...
% ‘Background Samples‘‘help‘);
% pause;
% for run = 1:20
% [xy] = ginput(1);
% hold on;
% plot(xy‘r*‘);
% x = uint8(x);
% y = uint8(y);
% TrainData_background(run1) = pic(xy1);
% TrainData_background(run2) = pic(xy2);
% TrainData_background(run3) = pic(xy3);
% end
% % 待分割出来的前景(鸭子)采样
% msgbox(‘Please get 20 foreground samples which is the part to be segmented(点击OK后再按任意键继续)‘ ...
% ‘Foreground Samples‘‘help‘);
% pause;
% for run = 1:20
% [xy] = ginput(1);
% hold on;
% plot(xy‘ro‘);
% x = uint8(x);
% y = uint8(y);
% TrainData_foreground(run1) = pic(xy1);
% TrainData_foreground(run2) = pic(xy2);
% TrainData_foreground(run3) = pic(xy3);
% end
% % 背景(湖水)训练样本 10*3
TrainData_background = ...
[52 74 87;
76 117 150;
19 48 62;
35 64 82;
46 58 36;
50 57 23;
110 127 135;
156 173 189;
246 242 232;
166 174 151];
% % 前景(鸭子)训练样本 8*3
TrainData_foreground = ...
[211 192 107;
202 193 164;
32 25 0;
213 201 151;
115 75 16;
101 70 0;
169 131 22;
150 133 87];
%% 建立支持向量机
% let background be 0 & foreground 1
% 即 属于背景(湖水)的点为0,属于前景(鸭子)的点位1
TrainLabel = [zeros(length(TrainData_background)1); ...
ones(length(TrainData_foreground)1)];
TrainData = [TrainData_background;TrainData_foreground];
model = svmtrain(TrainLabel TrainData ‘-t 1 -d 1‘);
%% 进行预测i.e.进行图像分割
preTrainLabel = svmpredict(TrainLabel TrainData model);
% 求三维矩阵pic的行数m,列数n,页数k
[mnk] = size(pic)
% 将三维矩阵pic转成m*n行,k列的双精度二维矩阵
TestData = double(reshape(picm*nk));
% 查看矩阵TestData的大小和类型
whos TestData;
% 预测前景(鸭子)和背景(湖水)的标签
TestLabal = svmpredict(zeros(length(TestData)1) TestData model);
%% 展示分割后的图像
% 根据预测得到的前景(鸭子)和背景(湖水)标签对整个图像的像素点进行分类,进而达到图像分割目的。
ind = reshape([TestLabalTestLabalTestLabal]mnk);
ind = logical(ind);
pic_seg = pic;
pic_seg(~ind) = 0;
% 展示分割后的图像
scrsz = get(0‘ScreenSize‘);
figure(‘Position‘[scrsz(3)*1/4 scrsz(4)*1/6 scrsz(3)*4/5 scrsz(4)]*3/4);
imshow(pic_seg);
% 分割前和分割后图像对比查看
scrsz = get(0‘ScreenSize‘);
figure(‘Position‘[scrsz(3)*1/4 scrsz(4)*1/6 scrsz(3)*4/5 scrsz(4)]*3/4);
subplot(121);
imshow(pic);
subplot(122);
imshow(pic_seg);
%%
toc;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3273 2013-08-18 11:03 Chapter_ImSegmentUsingLibsvm.m
文件 25237 2010-01-14 21:18 littleduck.jpg
----------- --------- ---------- ----- ----
28510 2
- 上一篇:HC-SR04超声波测距显示LED灯闪烁
- 下一篇:51单片机蜂鸣器音乐盒程序代码
相关资源
- libsvm下载50395
- 这里实现了四种SVM工具箱的分类与回
- 基于SVM的手写字体识别
- 基于pso优化lssvm两参数
- Libsvm参数详解(含具体程序代码,可
- 机器学习SVM(支持向量机)实验报告
- 遗传算法优化支持向量机
- MCKD与改进的LSSVM在滚动轴承故障诊断
- OpenCV+SVM简单应用-------路面箭头分类
- 分类器svm参考代码
- FormatDatalibsvm.xls 把数据转化为libsvm格
- SVM三类分类
- 利用级联SVM的人体检测方法
- svmpredict.mexw64 svmtrain.mexw64 及c文件
- 支持向量机学习笔记
- svm 网格搜索法
- qpso-svm算法
- 机器学习算法,包含随机森林,决策
- 基于SVM的入侵检测系统
- SVM(支持向量机)入门 (深入浅出讲
- SVM with mosek for banana
- FormatDatalLibsvm.xls.xls->svm格式转换
- 用kmeans得到二值分割后,再用svm进行
- 用于车牌字符识别的SVM算法
- HOG-LBP-detection
- svm gui安装该工具箱
- FormatDatalibsvm.xlslibSVM的数据格式转换工
- 支持向量机与神经网络的区别
- 基于遗传算法的SVM方法
- libsvm 数据格式转换宏命令---FormatDat
评论
共有 条评论