OpenCV cvMatchTemplate图像大小相同

时间:2011-02-18 04:17:07

标签: opencv

我目前正在尝试找到两个1 x 1图像之间的归一化互相关。所以为了做到这一点,我正在使用cvMatchTemplate。但是在使用cvMinMaxLoc之后,对于任何2个1×1图像,maxval总是返回1.00000。

所以我试图通过尝试在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);

2 个答案:

答案 0 :(得分:2)

检查归一化互相关背后的数学运算。您会发现,在1 * 1图像的情况下,您将始终获得1.0 NCC - NCC的主要思想是忽略强度差异。 http://opencv.willowgarage.com/documentation/c/object_detection.html

答案 1 :(得分:1)

可以在1×1图像或具有相同图像尺寸的任何图像上进行NCC,但通常没用。如果在图像I中搜索模板T,结果将是尺寸为I - T + 1的R,因此如果图像大小相同,则结果为1x1。如果您在任何具有该尺寸(1x1)的图像中搜索minmax位置,它将按预期返回1.000。