C#中的SIFT实现

时间:2010-12-28 17:04:42

标签: c# image-processing sift

我想在C#中使用sift实现。

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

有人可以给我一些有用的提示,还是有人知道C#中的另一个实现?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

https://sites.google.com/site/btabibian/projects/3d-reconstruction/code

你可以在这里找到一个有Sift类的实现。它基于EmguCV库。 sift_features(名称非常违反C#约定)返回一个Feature对象列表,该对象具有double []描述符成员。

答案 2 :(得分: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算法。结果是一样的。在两个示例中,功能的数量完全相同。

答案 3 :(得分:0)

命名约定遵循UBC发布的原始C代码,因为它只是测试算法如何执行的测试。如果您需要,我将很乐意为您提供帮助。