怎么學習機器視覺
可以從圖像處理入手,先了解下圖像處理最基本的操作,比如圖片的讀取、顯示,仿射變換,平滑、銳化、腐蝕膨脹等。看理論的同時多動手,可以用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記錄的是每個點的聚類標號,還要提前記錄每幅圖得到的關鍵點的個數,這樣就可以循環找到每幅圖對應的特征點的個數了