1

我正在研究計算特定圖像中的圖案(條)的算法。初看起來,我覺得很簡單,但我很快意識到了複雜性。 我已經試過簡單的閾值,模板匹配(小滑動窗口),邊緣檢測... 我只有幾個像這樣的圖像。所以我認爲機器學習算法不能給出更好的結果!但我仍然需要建議。 enter image description here計算圖像中的圖案

+1

你是在一個特定的語言工作?這可以幫助別人給你更好的答案。我認爲MAYBE你可以嘗試某種分水嶺算法,也許可以在邊緣地圖中使用它。另一種選擇可能是將圖像轉換爲二進制文件,並使用擴張和侵蝕來分隔條形圖。 – andrew

+0

感謝您的回答。歡迎任何語言。我認爲Matlab會很好。對於生產,Opencv可能是最好的。無論如何,這不是我現在的處理。我嘗試過不同的分割算法(分水嶺和邊緣),但仍然非常依賴於參數。形態學操作(擴張和侵蝕)更危險。一些投資回報可以永遠消失!再次感謝。 –

回答

2

我想你有足夠的數據從你的圖像。你需要從你的圖像只有酒吧裁剪。每幅圖像都會有幾十張小圖片。之後,您可以將所有圖像的大小調整爲某個預定義大小(例如24X24像素),使用HOG和SVM等描述符進行學習。對於錯誤只是使用圖像中的任何其他區域。

+0

謝謝你的回答Amitay。我對模板匹配有類似的想法。我試圖裁剪模板(基於隨機二值化後檢測到的物體的質心),並對梯度量值(HOG使用方向)進行模板匹配,並求和最大匹配。結果令人鼓舞,但仍不滿意。我會用HOG漸變方向嘗試你的想法,或許有一些例子。我認爲模板的大小會成爲自動化的一大問題,但我會盡力去嘗試。再次感謝。 –

0

這可能不適用於所有情況,但由於這些都是圓形條,您還可以嘗試使用圓檢測。 matlab(find circles)和opencv(hough circle transform)都支持這種循環變換。一個問題是你必須稍微使用參數(matlab比open cv更簡單),但幾乎任何方法都是如此。

這些方法對於較大的圖像效果更好,所以我調整了你的大小。您還需要知道要查找的圓的半徑。如果你的相機位置不變,這應該不會有太大的改變。該代碼取自我鏈接的matlab文檔頁面。它doensn't找到所有的圈子,但有些調整可能有助於

im = imread('http://i.stack.imgur.com/NRwUq.jpg'); 

%find circles doesn't work well on small images, I made the image 
%three times larger, if you have larger images you should use those for 
%better results 
bim = imresize(im, 3*size(im)); 

%find and display circles 
[centers, radii] = imfindcircles(bim,[8 20],'ObjectPolarity','bright',... 
    'Sensitivity',0.9); 
imshow(bim); 
h = viscircles(centers,radii); 

number_of_bars = numel(centers) 

我加入綠點到圈子探測器錯過藍X的過不正確的檢測。我手工完成了這些工作,但紅色圓圈是由matlab定位的。

enter image description here