Я пытался найти совпавшее изображение из образца изображения, используя сопоставление гистограммы. в большинстве случаев мой код работает нормально. Диапазон используемого метода, Bhattacharyya, составляет 0 <= метод <= 1
обычно при использовании метода Бхаттачарьи результат совпадения будет равен 0, в случае совпадения. но я пришел к случаю, когда оба изображения почти одинаковы, хотя может быть некоторая разница в контрасте.
вот почему эта процедура дает более высокий результат …
Кто-нибудь может мне помочь, почему это сравнение дает гораздо большую ценность?
SRC изображение и тестовое изображение
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. Вы можете получить лучшие результаты с разными размерами бинов, но это сложно определить без тестирования.
Других решений пока нет …