2012-03-21 128 views
0

我正在做一個android項目,我必須檢測一個標誌(標誌可以是不同的對比度,色調或飽和度),爲此我使用Android的OpenCV-2.3.1直方圖比較。標誌的圖像比較

我遵循的步驟如下;

1)計算存儲的圖像

private List<Integer> histSize; 
    private List<Float> ranges; 


    histSize.add(50); 
    histSize.add(60); 
    histSize.add(10); 

    ranges.add(0f); 
    ranges.add(256f); 

    ranges.add(0f); 
    ranges.add(180f); 

    ranges.add(0f); 
    ranges.add(256f); 

    channels.add(0); 
    channels.add(1); 
    channels.add(2); 


hsv_base1=new Mat(); 
Imgproc.cvtColor(image1,hsv_base1, Imgproc.COLOR_BGR2HSV); 
hsv_base.add(hsv_base1); 
Imgproc.calcHist(hsv_base, channels,new Mat(), hist_base, histSize, ranges,false); 

2) 那麼我裁剪所捕獲的圖像的每一幀的HIST值。裁剪圖像的大小與存儲圖像的大小完全相同,並使用與上述相同的方法計算其直方圖值。

3) 兩個圖像

double base_test2 = Imgproc.compareHist(hist_base1,hist_baseCamera1,Imgproc.CV_COMP_CHISQR); 

的存儲HIST值進行比較,我得到comparehist物有所值的。然而,問題是某些時候它爲一些隨機捕獲的圖像提供了很好的值,即不需要的。

所以現在我打算使用一些其他方法與直方圖比較。我的標誌由一個圓圈組成。

我的問題是::是否有任何方法,以便我可以找到捕獲的圖像由與存儲的徽標的圓的大小完全相同的圓組成。

或者我應該使用的任何其他方法,或者我可以播放存儲的通道,範圍,histSize值?

我以前曾使用模板匹配,它的速度很慢和

我會很感激有這方面的光同樣大小的圖像相當困難。

回答

0

確實有其他方法。事實上,比較直方圖是一種非常模糊的方法選擇,正如您已經發現的那樣。 (圖片大量可以有相同的直方圖,如下圖上看到的)

A roughly created de- and re construction of a greylevel picture

我看到你目前工作的一個標誌顏色,但更簡單的方法往往會導致更多更好的結果。因此,您應該考慮是否可以使用灰度圖像(這並不意味着您的徽標不能有顏色,這意味着在處理圖像之前您必須對圖像進行分割)。由於圖像中的數據量較少,因此更簡單的方法通常也會導致更快的運行時間。

如果您已經完成了分割,您將能夠對圖像進行閾值處理並執行BLOB分析(二進制大對象),您需要的算法取決於您感興趣的數值,並且可以找到這些方法和描述在OpenCV documentation

我的猜測是matchShapes()函數可以很好地爲您服務。但是,您需要了解一下圖像處理,這些處理略過直方圖的使用。

你當然必須找到Android版OpenCV的包裝。

P.S.記住在標籤中包含環境,編程語言和平臺是可行的。

+0

細分似乎是一個更好的選擇。雖然我從來沒有在openCv中實現分割,我會試試這個。 – user1249358 2012-03-22 05:35:10