2017-10-04 14 views
1

히스토그램 매칭을 사용하여 샘플 이미지에서 일치하는 이미지를 찾으려고했습니다. 대부분의 경우 내 코드가 정상적으로 작동합니다. 사용 된 메소드 Bhattacharyya의 범위는 0 < = 메쏘드 < = 1 입니다. 일반적으로 Bhattacharyya 메쏘드를 사용하면 출력 결과는 일치하는 경우에 0에 가깝습니다. 하지만 두 이미지가 거의 비슷하지만 약간의 명암 차이가있을 수는 있습니다. 이 절차가 더 높은 결과를주는 이유는 ...'compareHist'비슷한 이미지가 없습니다.

이 비교가 왜 더 큰 가치를 부여하는지 누가 도와 줄 수 있습니까?

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 이미지

src image and test image

는 JPEG 정보가 제거 된 히스토그램은 본질적으로 여과하고, 평활화 된 의미 압축되기 때문에 그들은 동일한 표시 되더라도 다른 히스토그램을 가질 것이다. 또한 PNG는 JPEG보다 더 큰 범위의 값을가집니다. 다른 크기의 빈 용지를 사용하면 더 나은 결과를 얻을 수 있지만 테스트를 거치지 않고 말하기는 어렵습니다.

+0

나는 이미 시도했지만 ... 같은 형식의 샘플을 가져 왔지만 값은 여전히 ​​높습니다 (0.64) ... 분명히 훨씬 더 높은 결과 (0.84)에서 다른 형식의 결과를 사용하고 있습니다. – reza5630