我写了一个代码,它通过 KNN 算法找到 K 个最接近的匹配项。获得 matMatch 和 matchIndices 后,我尝试在两个结果帧之间绘制匹配对。
我将matMask和matchIndices输入到函数Features2DToolbox.DrawMatches中:
Image<Bgr, byte> imResult = Features2DToolbox.DrawMatches(imModelCurr, imModel.keyPoints, imObserPrev,imObser.keyPoints, **matchIndices**, new Bgr(System.Drawing.Color.Yellow), new Bgr(System.Drawing.Color.Red), **matMask**, Features2DToolbox.KeypointDrawType.NOT_DRAW_SINGLE_POINTS);
http://www.emgu.com/wiki/files/2.4.0/document/html/e92d37e6-fe4a-ad09-9304-cd2d2533bfa8.htm但我注意到它给了我匹配对之间错误的绘图:
然后我尝试自己实现这样的功能:
for (int i = 0; i < matMask.Rows; ++i)
{
if (**matMask[i, 0]** > 0)
{
int indForCurrFrm = **matchIndices[i, 0]**;
int indForPrevFrm = i;
//for frame i-1
PointF fromFirstFrame = getImgObserved(keyPoints[indForPrevFrm]);
//for frame i
PointF NextCorrespondingMatchedFrame = getImModelXY(keyPoints[indForCurrFrm]);
imColorPrv2.Draw(new CircleF(fromFirstFrame, 5), new Bgr(mtchColor), 3);// for frame i-1
imColorShow.Draw(new CircleF(NextCorrespondingMatchedFrame, 5), new Bgr(mtchColor), 3); // for frame i
// draw line on my own matching
imResult.Draw(new LineSegment2DF(fromFirstFrame,NextCorrespondingMatchedFrame),new Bgr(System.Drawing.Color.FloralWhite),1);
}
}
并获取相应的对点坐标(X,Y)并自己绘制[查看快照中的结果]。
在左下角,您可以看到匹配项(以白线显示),每个对应的对都有一个相同颜色的圆圈[由我自己的函数],而在另一侧的右下角,它是 Emgu 的 DrawMatches 函数绘制的结果.注意这两个函数使用相同的matMash和matchIndices。
所以我想知道 EMGU 的 DrawMatches 是否有错误或者我做错了什么?