2017-10-04 66 views
1

我一直在嘗試使用直方圖匹配從樣本圖像中找到匹配的圖像。對於大多數情況下我的代碼工作正常。使用方法Bhattacharyya的範圍爲0 < =方法< = 1. 通常使用Bhattacharyya方法,輸出結果將接近於0,以防匹配的情況。但我已經遇到過這樣一種情況,即兩幅圖像幾乎相似,但可能存在一些對比差異。 這就是爲什麼這個程序給予更高的結果...'compareHist'不能用於相似圖像

任何人都可以幫助我,爲什麼這個比較給了這麼大的價值?

src image and test image

int main(){ 
    src_base = imread("images/src.jpg",-1); 
    src_test1 = imread("images/test.png",-1); 
    double base_test1 = hsvToHist(src_base, src_test1,3); 
    cout<< " Bhattacharyya template Base-Test(1) : "<< base_test1<<endl; 

    return 0; 
} 


double hsvToHist(Mat src_base, Mat src_test1, int method){ 

    Mat hsv_base, hsv_test1; 
    cvtColor(src_base, hsv_base, COLOR_BGR2HSV); 
    cvtColor(src_test1, hsv_test1, COLOR_BGR2HSV); 

    /// initialization to calculate histograms (Using 50 bins for hue, 60 for saturation) 
    int h_bins = 50; int s_bins = 60; 
    int histSize[] = { h_bins, s_bins }; 
    float h_ranges[] = { 0, 180 }; 
    float s_ranges[] = { 0, 256 }; 
    const float* ranges[] = { h_ranges, s_ranges }; 
    int channels[] = { 0, 1 }; 

    /// Histograms 
    Mat hist_base, hist_test1; 

    /// Calculate the histograms for the HSV images 
    calcHist(&hsv_base, 1, channels, Mat(), hist_base, 2, histSize, ranges, true, false); 
    normalize(hist_base, hist_base, 0, 1, NORM_MINMAX, -1, Mat()); 


    calcHist(&hsv_test1, 1, channels, Mat(), hist_test1, 2, histSize, ranges, true, false); 
    normalize(hist_test1, hist_test1, 0, 1, NORM_MINMAX, -1, Mat()); 

    ///'3' for Bhattacharyya 
    double base_test1 = compareHist(hist_base, hist_test1, method); 
    return base_test1; 
} 
+0

我懷疑它與底部的文字有關。嘗試將文本裁剪出來然後進行比較。 – noel

+0

不,我在這種情況下只使用了圖像。這裏我附上了一個截圖,這就是爲什麼它讓你感到困惑。 – reza5630

+0

哦,我只是注意到他們是不同的圖像格式。這就是爲什麼。 – noel

回答

0

的PNG和JPEG圖像都會有不同的直方圖,即使他們看起來一樣,因爲JPEG壓縮,這意味着信息已被刪除和直方圖已經基本上過濾和平滑。另外,PNG的值範圍比JPEG大。您可以使用不同的紙盒尺寸獲得更好的效果,但是如果沒有測試就很難說清楚。

+0

我已經嘗試過...但儘管我已經採取了相同格式的樣本,但值仍然很高(0.64)... 顯然使用不同格式的結果的結果要高得多(0.84)。 – reza5630