我覺得這與邊框的關鍵點做:
完整代碼可以在這裏找到。檢測器檢測關鍵點,但是對於SURF描述符返回一致的值,它需要圍繞它的像素塊中的像素數據,這在邊界像素中不可用。在檢測到關鍵點之後但計算描述符之前,可以使用以下片段刪除邊界點。我建議使用20或更多的borderSize。
removeBorderKeypoints(vector<cv::KeyPoint>& keypoints, const cv::Size imageSize, const boost::int32_t borderSize)
{
if(borderSize > 0)
{
keypoints.erase(remove_if(keypoints.begin(), keypoints.end(),
RoiPredicatePic((float)borderSize, (float)borderSize,
(float)(imageSize.width - borderSize),
(float)(imageSize.height - borderSize))),
keypoints.end());
}
}
凡RoiPredicatePic實現爲:
struct RoiPredicatePic
{
RoiPredicatePic(float _minX, float _minY, float _maxX, float _maxY)
: minX(_minX), minY(_minY), maxX(_maxX), maxY(_maxY)
{}
bool operator()(const cv::KeyPoint& keyPt) const
{
cv::Point2f pt = keyPt.pt;
return (pt.x < minX) || (pt.x >= maxX) || (pt.y < minY) || (pt.y >= maxY);
}
float minX, minY, maxX, maxY;
};
此外,近似最近鄰索引是不匹配的圖像對之間的功能的最佳途徑。我建議你嘗試其他更簡單的匹配器。
來源
2011-05-31 05:59:22
KMS
要100%正確,它是右圖像的左上角。我們需要一種方式來篩選這些明顯錯誤的匹配,任何想法?爲什麼這些點被檢測爲匹配? – Orka 2011-05-30 09:37:45
您應該將我的答案標記爲正確答案。實際的一個是誤導。 – 2013-05-12 12:28:34