2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > matlab图像分类器 Matlab 基于svm的图像物体分类

matlab图像分类器 Matlab 基于svm的图像物体分类

时间:2023-05-01 16:34:24

相关推荐

matlab图像分类器 Matlab 基于svm的图像物体分类

Matlab 基于svm的图像物体分类

发布时间:-05-16 20:27,

浏览次数:1623

, 标签:

Matlab

svm

本周工作日志,老师布置了一个小作业,让我们使用matlab实现图像物体分类

matlab 图像分类

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-1 for j= 1:n2 if group(i,j)*group(i+1,j

)<1%两者类别不一致,分界线 if i<130 %这个是我估计的值,选择 陆地与天交接线下面一点儿的坐标就行 img2(i,j,:)=0; end end

end 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-1 for j= 1:n2 if group(i,j)*group(i+1,j)<1%两者类别不一致,分界线 if i<170

%这个是我估计的值,这次选择陆地水下面一点儿的值。 img2(i,j,1)=255; end end end end imshow(img2);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。