1

別の画像内の画像の一部を見つけたいと思います。ただし、両方の画像に考慮したくない領域ピクセルがいくつかあります。そのため、適切なピクセルを示すために、0 または 1 を含むある種のマスクを使用することを考えていました。

emgu の MatchTemplate メソッドを使用していますが、マスクを受け入れません。私がやりたいことをする他の方法はありますか?ありがとうございました!

ReferenceImage.MatchTemplate(templateImage, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCORR_NORMED);
4

2 に答える 2

0

解決策を考えました。referenceImageMask と templateMask の良いピクセルには 1 があり、悪いピクセルには 0 があると仮定します。また、その referenceImage と templateImage は既にマスクされており、不良ピクセルにも 0 が含まれています。

次に、テンプレート マッチングの最初の結果は、画像間の正規化されていない相互相関を示します。

2 番目のテンプレート マッチングでは、可能なオフセットごとに、両方の画像で同時にゼロとは異なる (マスクされていない) ピクセル数が示されます。

次に、その数値で相関を正規化すると、必要な値が得られます。両方の画像でマスクされていないピクセルの平均積。

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));
于 2013-10-08T03:03:45.657 に答える