gpt4 book ai didi

c++ - 'compareHist' 不适用于类似图像

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:38 24 4
gpt4 key购买 nike

我一直在尝试使用直方图匹配从示例图像中找到匹配的图像。在大多数情况下,我的代码工作正常。使用的方法 Bhattacharyya 的范围是 0 <= method <= 1。通常使用 Bhattacharyya 方法,在匹配的情况下,输出结果将接近 0。但是我遇到了两个图像几乎相似的情况,尽管可能存在一些对比度差异。这就是为什么这个程序给出了更高的结果......

谁能帮我解释一下,为什么这种比较会产生如此大的值(value)?

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;
}

最佳答案

PNG 和 JPEG 图像将具有不同的直方图,即使它们看起来相同,因为 JPEG 是压缩的,这意味着信息已被删除并且直方图基本上已被过滤和平滑。此外,PNG 将具有比 JPEG 更大的值范围。使用不同的 bin 大小可能会获得更好的结果,但如果不进行测试就很难判断。

关于c++ - 'compareHist' 不适用于类似图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46563708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com