我想在另一个图像中找到一张图像。但是,我不想考虑这两个图像中的一些区域像素。所以我正在考虑使用某种带有零或一的掩码来表示好的像素。
我正在使用 emgu 的 MatchTemplate 方法,它不接受掩码。有没有其他方法可以做我想做的事情?谢谢!
ReferenceImage.MatchTemplate(templateImage, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCORR_NORMED);
我想到了一个解决办法。假设 referenceImageMask 和 templateMask 在好像素中有 1,在坏像素中有 0。并且那个 referenceImage 和 templateImage 已经被屏蔽并且在坏像素中也有 0。
然后,模板匹配的第一个结果将给出图像之间未归一化的互相关。
第二个模板匹配将为每个可能的偏移量提供两个图像中同时不同于零(未屏蔽)的像素数。
然后,用该数字标准化相关性应该给出我想要的值。两个图像中未屏蔽的像素的平均乘积。
Image<Gray, float> imCorr = referenceImage.MatchTemplate(templateImage, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCORR);
Image<Gray, float> imCorrMask = referenceImageMask.MatchTemplate(templateMask, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCORR);
imCorr = imCorr .Mul(imCorrMask .Pow(-1));
今天你可以使用这个方法:
CvInvoke.MatchTemplate(actualImage, expectedImage, result, TemplateMatchingType.CcoeffNormed, mask);