Tôi đã viết một mã mà nó tìm thấy K khớp gần nhất bằng thuật toán KNN. Sau khi nhận được matMatch và matchIndices, tôi đã cố gắng vẽ các cặp kết hợp giữa hai khung kết quả.Vẽ các cặp khớp trong tính toán hình ảnh của KNN và lỗi tiềm ẩn trong Features2DToolbox.DrawMatches
tôi ăn matMask và matchIndices vào chức năng 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 nhưng tôi nhận thấy nó mang lại cho tôi vẽ lại sai giữa các cặp kết hợp:
Sau đó, tôi đã cố gắng để thực hiện như vậy functio n bởi bản thân mình:
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);
}
}
và tìm tọa độ điểm cặp tương ứng (X, Y) và tự vẽ [xem kết quả trong ảnh chụp].
Một phía dưới bên trái bạn có thể thấy các kết quả phù hợp (được hiển thị bằng đường trắng) và mỗi cặp tương ứng với một vòng tròn cùng màu [theo chức năng của riêng tôi] và ở phía dưới cùng bên phải, đó là kết quả được vẽ bởi Hàm DrawMatches từ Emgu.Pay chú ý rằng hai hàm này sử dụng cùng một matMash và matchIndices.
Vì vậy, tôi đã tự hỏi nếu DrawMatches tại EMGU có lỗi hoặc tôi đang làm gì đó sai?
Hãy vẽ điểm ít hơn, như 10, nó là không thể để phân tích các dòng. BTW, nó là kỳ lạ mà các dấu chấm màu đỏ đã không được công nhận bởi các thuật toán. – Pedro77