資源簡介
基于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單片機蜂鳴器音樂盒程序代碼
評論
共有 條評論