我目前正在尝试查找两个1乘1图像之间的归一化交叉相关。所以为了做到这一点,我使用了cvMatchTemplate。但是在使用cvMinMaxLoc之后,对于任何2个1×1的图像,maxval始终返回1.00000。OpenCV cvMatchTemplate相同的图像大小
所以我试图通过尝试在6乘3图像和3乘3图像上使用cvMatchTemplate来绕过这一点。对于每个原始像素,我将它扩展为6乘3和3乘3,以查看这是否会提供更好的结果。它没有。 maxval仍然返回1.000000。有没有更好的方法来找到2像素之间的NCC?
cvSetImageROI(img, cvRect(curWidth, curHeight, 1, 1));
IplImage* tempROI = cvCreateImage(cvSize(1, 1), img->depth, img->nChannels);
cvCopy(img, tempROI);
cvResetImageROI(img);
IplImage* currentROI = cvCreateImage(cvSize(6,3), img->depth, img->nChannels);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 6; j++) {
cvSetImageROI(currentROI, cvRect(j, i, 1, 1));
cvCopy(tempROI, currentROI);
cvResetImageROI(currentROI);
}
}
cvReleaseImage(&tempROI);
cvSetImageROI(opp_img, cvRect(opp_loc, curHeight, 1, 1));
tempROI = cvCreateImage(cvSize(1, 1), opp_img->depth, opp_img->nChannels);
cvCopy(opp_img, tempROI);
cvResetImageROI(opp_img);
IplImage* centerROI = cvCreateImage(cvSize(3,3), opp_img->depth, opp_img->nChannels);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cvSetImageROI(centerROI, cvRect(j, i, 1, 1));
cvCopy(tempROI, centerROI);
cvResetImageROI(centerROI);
}
}
IplImage *re = cvCreateImage(cvSize(4, 1), IPL_DEPTH_32F, 1);
cvZero(re);
cvMatchTemplate(currentROI, centerROI, re, CV_TM_CCORR_NORMED);
cvMinMaxLoc(re, &minval, &maxval, &minloc, &maxloc);
对不起,我的问题有一个错字。 maxval返回1.0000而不是maxloc。这是否会改变什么呢?还是1.000依然直觉上有意义?如果我比较两个1乘1的图像,我期望maxval在-1和1之间的范围内。 – 2011-02-18 22:44:23