我目前正在嘗試查找兩個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