3

我想檢測圖像內容,我需要做的是 查找圖像是襯衫還是褲子。用於識別圖像中對象的對象檢測

圖1 enter image description here

圖2 enter image description here

如果我基於比較的形狀我需要的結果是給定圖像是T恤的提供T恤的圖像然後

我試過的是哈爾級聯,但它沒有給出正確的輸出。並且對於這個需要的樣本大小太大了

回答

1

假設您只想分離僅包含感興趣對象的圖像,則可以使用BOW(視覺單詞袋),將圖像作爲特徵集呈現,然後使用SVM或任何其他分類器對其進行分類。

您還可以使用特徵檢測器+描述符+分類器(例如SURF + SVM)。 雖然現在有更強大和更快速的特徵檢測器...

爲了避免訓練過程,您甚至可以嘗試使用模板匹配(每個輪廓)。 一種這樣的算法被提供在: Fast template matching - Codeproject

哈爾級聯用於對象檢測,其中包含其它內容,以及,因爲它emloys滑動窗口檢測圖像+它含有可折衷性能和魯棒性之間的階段 - 它們速度很快,但有些對象可能會丟失,因爲每個階段都容易出現錯誤分類錯誤,這些錯誤會累積起來。

+1

Dajuric喜:模板匹配會在這裏做? bez它只適用於相同的圖像沒有?意味着在這裏檢查http://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html – usernan

+1

你可以給我任何SURF + SVM的例子 – usernan

+1

它是一種不同類型的模板匹配,您可以在其中創建多個實例模板。請參閱文章(鏈接)。 – dajuric

1

如果您的圖像包含已分割的對象,如示例所示,您可以在其中指示對象與背景像素的位置創建二進制圖像。

之後,假設對象通常不會旋轉或扭曲,您可以使用簡單的功能進行分類。例如,對於上面的情況,只需計算有兩次前景像素運行的掃描線的百分比。對於一件襯衫來說,這應該是一個很低的價值,而褲子應該很高。

顯然,如果給出的示例圖像不能代表您實際嘗試解決的問題,則這不起作用。

編輯:一些示例MATLAB代碼:

function ratio=TwoRunFeature(I) 
    g=rgb2gray(I); 
    b=imdilate(g<255,ones(5)); 
    d=abs(imfilter(b,[-1 1])); 
    runs=sum(d,2); 
    ratio=sum(runs==2)/sum(runs==1); 
end 

function TestImage(name) 
    I=imread(name); 
    fprintf('%s: %f\n',name,TwoRunFeature(I)); 
end 

TestImage('pants.jpg'); 
TestImage('shirt.jpg'); 

打印:

pants.jpg: 1.947977 
shirt.jpg: 0.068627 

褲會給高的數字和襯衫低。只要你想要的地方達到閾值,你就完成了。

+1

嗨Photon可以提供我任何參考鏈接 – usernan

+1

這真的很瑣碎。我將添加一些matlab代碼來顯示。 – Photon

+1

謝謝光子,但問題是,如果我想檢測一半褲子與褲子然後這將失敗在這個時候 – usernan

1

我會假設這兩個圖像來自您擁有的數據庫。 根據我的經驗,在這些圖像上應用特徵(局部描述符)會創建一種人造特徵,因爲分割或將背景設置爲單色。您的情況中的第二個重點是這些圖像可能具有不同的顏色或紋理,並且大部分檢測到的特徵將來自對象內的區域。這些地區並不重要,與分類無關。 但是,分割圖像會讓問題變得更容易。 適合您的情況的最佳和最簡單的解決方案: 1.將圖像轉換爲灰度,然後通過閾值轉換爲二進制。 2.反轉圖像,所以背景是黑色的,物體是白色的。 3.填充孔:如果對象內的圖像的任何部分是白色,則會導致出現孔。 4.現在只檢測邊界。 By I = dilated IBinary - IBinary 5.採樣邊界: 在每個大小爲4x4的窗口中只選擇一個非零像素 6.下一步是使用Shape上下文描述符:描述圖像。 7.通過使用視覺詞語或稀疏編碼包,重新表示圖像。 8.最大化池獲得豐富的代表。 9-SVM

+0

嗨BH85你可以給我提供任何參考鏈接 – usernan

+0

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.8567 – BH85