C#中的SIFT实现

4

我想在C#中使用sift算法。

我找到了这个网站http://user.cs.tu-berlin.de/~nowozin/libsift/,但是我很困惑,因为没有主程序或项目文件。我不知道如何在普通的C#控制台/窗口应用程序中使用它,以及GK#的规则是什么。

有人能给我一些有用的提示吗?或者有人知道另一个C#实现的方法吗?


很遗憾,链接现在已经失效了。 - Tom
1
代码似乎在这里:http://www.nowozin.net/sebastian/tu-berlin-2006/libsift/ - sunside
4个回答

2

没有主程序,因为它显然是一个类库。要么使用您喜欢的IDE创建项目并将源文件添加到其中,要么打开终端窗口并使用包含的Makefile构建库。


1
这段代码与Surf算法http://www.emgu.com/wiki/index.php/SURF_feature_detector_in_CSharp非常相似。
    public Image<Bgr, Byte> PutFeaturesOnImage(string file)
    {
        Image<Gray, Byte> modelImage = new Image<Gray, byte>(file);
        SIFTDetector siftCPU = new SIFTDetector();
        VectorOfKeyPoint modelKeyPoints = new VectorOfKeyPoint();
        MKeyPoint[] mKeyPoints = siftCPU.DetectKeyPoints(modelImage, null);
        modelKeyPoints.Push(mKeyPoints);
        ImageFeature<float>[] reulst = siftCPU.ComputeDescriptors(modelImage, null, mKeyPoints);
        Image<Bgr, Byte> image = Features2DToolbox.DrawKeypoints(modelImage, modelKeyPoints, new Bgr(Color.Red), Features2DToolbox.KeypointDrawType.DEFAULT);
        return image;
    }

请添加库:
using Emgu.CV;
using Emgu.CV.Features2D;
using Emgu.CV.Util;
using Emgu.CV.Structure;
using System.Drawing;

我比较了EmguCv和OpenCV SIFT算法。结果是一样的。两个示例中,特征数量完全相同。

1

我尝试了Tabibian先生实现的代码,但是出现了一个错误,提示:“在命名空间'Emgu.CV.CvEnum'中,类型或命名空间名称'INVERT_METHOD'不存在。” 我检查了cvEnum,但似乎Invert_Method已被删除或不再支持。 是否有其他命令可以替代?[第660行:sift.cs:CvInvoke.cvInvert(H,H_inv.Ptr,Emgu.CV.CvEnum.INVERT_METHOD.CV_SVD);] - farzin parsa

0

命名规则遵循UBC发布的原始C代码,因为这只是一个测试,以查看算法的性能。如果您需要任何帮助,我将非常乐意提供。


我尝试了Tabibian先生实现的代码,但是出现了一个错误,提示:“在命名空间'Emgu.CV.CvEnum'中,类型或命名空间名称'INVERT_METHOD'不存在。” 我检查了cvEnum,但似乎Invert_Method已被删除或不再支持。 是否有其他命令可以替代?[第660行:sift.cs:CvInvoke.cvInvert(H,H_inv.Ptr,Emgu.CV.CvEnum.INVERT_METHOD.CV_SVD);] - farzin parsa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接