Matlab 基于svm的图像物体分类
生活随笔
收集整理的這篇文章主要介紹了
Matlab 基于svm的图像物体分类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
matlab 圖像分類
本周工作日志,老師布置了一個小作業,讓我們使用matlab實現圖像物體分類
目錄
文章目錄
- matlab 圖像分類
- 目錄
- 1分類原理
- 2程序流程
- 補充
1分類原理
基于一個很樸素的觀點,不同物體在色素三維空間里的分布不同,使用svm可以構造一個分類面。
2程序流程
- 1首先加載圖片
- 2選取不同物體的代表點
- 3訓練svm分類器
- 4將訓練好的分類器應用到整張圖片上。
##3代碼如下
%給初學者看得 function showline(img) [n1,n2,~]=size(img); %我盡量寫的簡單易懂一點兒 %首先你使用aa=imread(‘1.jpg’) 這個1.jpg 只是個例子,具體看你的圖片叫什么,對了把圖片放在你的工作目錄里面 %或者在1.jpg前面加上D:\研一\路徑前綴 %好,前期處理完成,showline(aa),這個具體是aa還是bb就看你怎么取得變量名了。 %現在說一個比較關鍵的東西,學習matlab最踏實的辦法,是哪個不會就help 它一下,但這個比較費時間因為講的太細了。 imshow(img); img2=img;%顯示圖片 x1=floor(ginput(5)); %函數運行到這兒,會彈出鼠標可以移動的十字架,在你覺得作為第一類樣本的像素上,選5個點吧,加floor是確保得到的坐標都是整數。 x2=floor(ginput(5)); %這個同理,不過是第二類了。 x3=floor(ginput(5)); %這個也同理. x=zeros(10,3); %每次分類的時候都有10個樣本,同時每個樣本都有三個屬性,rgb。 for i=1:5 x(i,:)=reshape(img(x1(i,2),x1(i,1),:),1,3); x(i+5,:)=reshape(img(x2(i,2),x2(i,1),:),1,3); end %賦值,因為圖像像素值是N*m*3的矩陣,不好直接用,reshape為1*3的。 y=[ones(5,1);-1*ones(5,1)]; %標簽集 x=double(x); svmstruct=svmtrain(x,y); %svm訓練 group=svmclassify(svmstruct,double(reshape(img,n1*n2,3))); %使用svm group=reshape(group,n1,n2); %將group調整為一個n1*n2的存放類別標簽的矩陣。 for i=1:n1-1for j= 1:n2if group(i,j)*group(i+1,j)<1%兩者類別不一致,分界線if i<130 %這個是我估計的值,選擇 陸地與天交接線下面一點兒的坐標就行img2(i,j,:)=0;endendend end for i=1:5 x(i,:)=reshape(img(x2(i,2),x2(i,1),:),1,3); x(i+5,:)=reshape(img(x3(i,2),x3(i,1),:),1,3); end x=double(x); %賦值,因為圖像像素值是N*m*3的矩陣,不好直接用,reshape為1*3的。 y=[ones(5,1);-1*ones(5,1)]; %標簽集 svmstruct=svmtrain(x,y); %svm訓練 group=svmclassify(svmstruct,double(reshape(img,n1*n2,3))); %使用svm group=reshape(group,n1,n2); %將group調整為一個n1*n2的存放類別標簽的矩陣。 for i=1:n1-1for j= 1:n2if group(i,j)*group(i+1,j)<1%兩者類別不一致,分界線if i<170 %這個是我估計的值,這次選擇陸地水下面一點兒的值。img2(i,j,1)=255;endendend end imshow(img2);補充
如果還是有不會的,可以掃碼關注這個公眾號:博主會在24小時內回復
總結
以上是生活随笔為你收集整理的Matlab 基于svm的图像物体分类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12c oracle 修改内存_还在等1
- 下一篇: mysql 1045错误ODBC_MyS