Почему matchTemplate дает неправильные совпадения в центре изображения?
Я использую matchTemplate() в openCV для поиска в небольшой области кадра камеры, скажем, область 128x128 в верхнем левом углу для меньшего шаблонного изображения, скажем, размером 32x32.
У меня странная проблема. При рисовании прямоугольника в minLoc у меня иногда бывает совершенно плавное и нормальное отслеживание / сопоставление, и поэтому я знаю, что мой код (в основном) работает.
Проблема, однако, заключается в том, что я выбираю случайные шаблоны для сопоставления при каждой инициализации, и в 90% случаев центр searchRegion находится там, где совпадение (неправильно) обнаружено. Независимо от того, куда я перемещаю камеру, центр изображения "совпадает" (с небольшими флуктуациями в случайных точках через каждые несколько кадров).
Я что-то упускаю из-за того, как работает matchTemplate/normalize? Почему центр изображения src неправильно выбран в качестве совпадения?
Вот код, обобщающий то, что я делаю.
Mat searchRgn = frame.submat(searchRgnRect);
int result_cols = searchRgn.cols() - foi_img.cols() + 1;
int result_rows = searchRgn.rows() - foi_img.rows() + 1;
Mat result = new Mat(result_rows,result_cols, CvType.CV_32FC1);
Imgproc.matchTemplate(searchRgn, foi_img, result,Imgproc.TM_SQDIFF_NORMED);
Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1);
Core.MinMaxLocResult mmr = Core.minMaxLoc(result);
//draw rectangle at mr.minLoc