怎么学习机器视觉
可以从图像处理入手,先了解下图像处理最基本的操作,比如图片的读取、显示,仿射变换,平滑、锐化、腐蚀膨胀等。看理论的同时多动手,可以用Matlab编程,也可以用C++搭配OpenCV。个人推荐后者。当然两者都了解更好。这方面的书和网上很多人的博客都是不错的参考。有了一定基础之后后面该如何学习相信你就会有自己的想法了。而且有了这些基础之后就可以做很多有意思的事情了,如人脸识别,行人检测,字符识别等等。
如何对SIFT得到的特征向量做k-means聚合
关于SIFT之后的K-means聚类的问题
本人在做bag of words这个模型,选择的是SIFT+SVM,中间涉及到聚类分析,想用K-means算法做聚类
现在的问题是,假设我用100张学习图片做SIFT特征提取,每张图片都是N*128的向量,并且每张图片的特征点N不同
那么在做K-means聚类的时候,是每一张图片分别作聚类,还是将100张图片的特征空间整合成(N1+N2+...+N100)*128的矩阵,再做聚类?
因为我用的是matlab自带的kmeans函数,如果是第二种情况,聚类后假设质点k取300,那么想分别得到每一张图片中属于各个质点的特征点有多少个要怎么实现?
另:MATLAB中自带kmeans函数说明如下:
[IDX,C] = kmeans(X,k) returns the k cluster centroid locations in the k-by-p matrix C.
[IDX,C,sumd] = kmeans(X,k) returns the within-cluster sums of point-to-centroid distances in the 1-by-k vector sumd.
[IDX,C,sumd,D] = kmeans(X,k) returns distances from each point to every centroid in the n-by-k matrix D.
本人也是昨天才看到聚类算法,许多不清楚,希望大虾指点,万分谢谢~~
这位童鞋,你显然没有实质上的理解BoW Model,更不用说BoF Model了。建议你先搞清楚BoW ,结合BoW,再去理解BoF 。这样就很容易理解了。首先,对你指出你的两个问题。第一,使用100幅图片来做机器学习是远远不够的,至少要200以上,这样才能有质的效果;第二,即使是只使用100幅图片,使用matlab自带的kmeans函数,如果你的电脑内存是2G,win7系统,肯定会产生Out of Memeroy的问题。对于你提出的问题,显然是应该把你那100图片的所有SIFT特征点向量散布于一个128D的空间中来进行聚类,这样才能真正的找到每幅图片中的相似点,你放在一幅图片里面聚类,那机器能学到啥子哦~~这就是模式识别里面的机器学习啦,我是西电的,欢迎交流~~
你可以大概的算一下那些矩阵的大小,估计都七八百M了,内存也不可能全部分给matlab,系统就占了好多,肯定会有内存溢出的问题
kmeans中idx记录的是每个点的聚类标号,还要提前记录每幅图得到的关键点的个数,这样就可以循环找到每幅图对应的特征点的个数了