Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void matchTemplateZNCC8x8_CV(cv::Mat result, cv::Mat image, cv::Mat patch/*, int* variance, int minVariance*/)
- {
- int resultWidth = image.cols - patch.cols + 1;
- int resultHeight = image.rows - patch.rows + 1;
- const int patchWidth = 8;
- const int patchHeight = 8;
- cv::Scalar mean, stddev;
- cv::meanStdDev(patch, mean, stddev);
- unsigned int templateMean = mean[0];
- unsigned int templateStddev = stddev[0];
- for (int x = 0; x < resultWidth; x++) {
- for (int y = 0; y < resultHeight; y++) {
- int sum = 0;
- // mean of image under inspection.
- cv::meanStdDev(image(cv::Rect(x, y, 8, 8)), mean, stddev);
- unsigned int imageMean = mean[0];
- unsigned int imageStddev = stddev[0];
- for (int u = 0; u < patchHeight; u++) {
- for (int v = 0; v < patchWidth; v++) {
- int templatePixel = patch.at<unsigned char>(v, u) - (int)templateMean;
- int imagePixel = image.at<unsigned char>(y + v, x + u) - (int)imageMean;
- sum += templatePixel * imagePixel;
- }
- }
- sum /= 64;
- result.at<float>(y, x) = (float)sum / ((float)templateStddev * (float)imageStddev);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement