如何给图像分类

这个课题是我上学期应该做的,结果拖到现在才完成,有点不好意思,做完了才发现很简单,但是就是平时偷懒,呵呵。现在来记录各个步骤,以便以后的研究。

前提是给风景图像和卡通图像分类。使用的工具是SVM-KM,基于matlab平台。

1。准备200多幅用于训练的图像,一般采用jpg的,因为是彩色图像便于识别,最好用相同尺寸的,比如桌面背景的这种图片。

2。采用特征提取算法对这些图像进行提取。我采用的是颜色直方图算法。因为网上对颜色直方图的解释说明比较少,所以自己编写了一个。主要思路就是对jpg图像进行RGB分解,然后再以R,G,B为空间坐标轴的基础上让图像的所有像素点投影上去,最后统计每个立体小方格中的像素数,最后映射到二维矩阵中。立体小方格的排列次序是自定的,只要所有图像遵从相同的标准即可。

3。上面一步得到的是一个矩阵。假如小方格统计出来有512个,那么每一个特征相当于是512维,所以最后的矩阵就是200*512的,每一行代表一个图像。在SVM中用xapp来表示,进行输入。

4。接着输入yapp,即训练图像的分类,为了给机器一个先验知识。假设风景图像是1,那么卡通图像是-1,最后得到的是200*1的矩阵,由1和-1表示。同样要在SVM中输入。

5。选择合适的核函数,比如“htrbf”或者“poly”或者“guassian”等等,根据不同的核函数来选择不同的参数输入。通用的训练函数为

[xsup,w,w0,tps,alpha] = svmclassLS(xapp,yapp,C,lambda,kernel,kerneloption,verbose,phi,qpsize);

讲xapp和yapp输入后训练得到的结果。

6。选择另外的图像,用与2中相同的方法对图像进行特征提取,同样得到特征矩阵xtest是n*512的形式。这个时候将xtest输入进行最后的测试,测试函数为

ypred = svmval(xtest,xsup,w,w0,kernel,kerneloption,ones(length(xtest),1));

ypred就是结果。其中容易犯错的是length(xtest)其实这个参数就是要测试的图像数量,一般情况都是n>>512的,但是当n<512时就可以直接输入n以免发生错误。

7。最后得到的ypred矩阵一定是n*1形式的,根据结果就可以判断分类结果了。

至于画图还没有研究,有待以后继续,呵呵。

转自http://blog.sina.com.cn/s/blog_606551c50100i6bp.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值