2014-01-30 26 views
2

我的代碼(OpenSURF C#,IPOINT結構使用),它計算SURF兩個圖像匹配:如何篩選OpenSURF無效匹配C#中使用RANSAC

var surfEngine = new EngineSURF(); 

points[0] = surfEngine.GetPoints(images[0]).ToList(); 
points[1] = surfEngine.GetPoints(images[1]).ToList(); 
points[2] = surfEngine.GetPoints(images[2]).ToList(); 
points[3] = surfEngine.GetPoints(images[3]).ToList(); 

var match1 = surfEngine.GetMatches(points[0], points[1]).ToArray(); 
var match2 = surfEngine.GetMatches(points[0], points[2]).ToArray(); 
var match3 = surfEngine.GetMatches(points[0], points[3]).ToArray(); 

outBmps[0] = surfEngine.PaintSURF(new Bitmap(images[0]), new Bitmap(images[1]), match1); 
outBmps[1] = surfEngine.PaintSURF(new Bitmap(images[0]), new Bitmap(images[2]), match2); 
outBmps[2] = surfEngine.PaintSURF(new Bitmap(images[0]), new Bitmap(images[3]), match3); 

var path = Path.GetDirectoryName(images[0]) ?? string.Empty; 

Checks.StringIsNotNull(path); 

if(outBmps[0] != null) outBmps[0].Save(Path.Combine(path,"result0_1.png"), ImageFormat.Png); 
if (outBmps[1] != null) outBmps[1].Save(Path.Combine(path, "result0_2.png"), ImageFormat.Png); 
if (outBmps[2] != null) outBmps[2].Save(Path.Combine(path, "result0_3.png"), ImageFormat.Png); 

而且我有一個相匹配:

1)最佳匹配

intel best mathces

2)錯誤匹配

intel wrong matches

3)錯誤匹配

Intel wrong matches

如何過濾錯(2,3)RANSAC匹配?有任何示例代碼? 謝謝!

回答

2

Accord.Imaging允許使用RANSAC查找SURF特徵和估計點。

var correlationPoints1 = matches[0]; 
var correlationPoints2 = matches[1]; 
var ransac = new RansacHomographyEstimator(0.10, 0.99); 
var homography = ransac.Estimate(correlationPoints1, correlationPoints2); 
var inliers1 = correlationPoints1.Submatrix(ransac.Inliers); 
var inliers2 = correlationPoints2.Submatrix(ransac.Inliers); 
var result = new IntPoint[][] 
        { 
         inliers1, 
         inliers2 
        }; 

http://www.nuget.org/packages/Accord.Imaging/

http://accord-framework.net/samples.html