我想在C#中使用sift实现。
我找到了这个网站http://user.cs.tu-berlin.de/~nowozin/libsift/ 但我很困惑,没有主程序或项目文件。我无法理解如何在普通的C#控制台/窗口应用程序中使用它以及GK#的规则是什么。
有人可以给我一些有用的提示,还是有人知道C#中的另一个实现?
答案 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代码,因为它只是测试算法如何执行的测试。如果您需要,我将很乐意为您提供帮助。