本周工作日志,老师布置了一个小作业,让我们使用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);

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信