2010-12-28 13 views
2

Ich möchte Sift-Implementierung in C# verwenden.SIFT-Implementierung in C#

Ich fand diese Website http://user.cs.tu-berlin.de/~nowozin/libsift/ aber ich bin verwirrt, dass es keine Hauptprogramm oder Projektdatei gibt. Ich konnte nicht verstehen, wie ich es in der normalen C# -Konsolen-/Fensteranwendung benutzen kann und was Regel von GK # ist.

Könnte jemand geben Sie mir einige nützliche Hinweise, oder jemand eine andere Implementierung in C# nicht kennt?

+0

leider ist die Verbindung jetzt tot – Tom

+1

Code scheint hier zu sein: http://www.nowozin.net/sebastian/tu-berlin-2006/libsift/ – sunside

Antwort

0

Die Namenskonvention folgt der ursprüngliche C-Code veröffentlicht von UBC, da es nur ein Test war, um zu sehen, wie der Algorithmus durchführt. Ich werde glücklich sein zu helfen, wenn Sie irgendwelche brauchen.

+0

Ich versuchte, den von Mr.Tabibian implementiert Code, aber ich einen Fehler bekommen sagen: Der Typ oder Namespace-Name ‚INVERT_METHOD‘ existiert nicht im Namensraum ‚Emgu.CV.CvEnum‘. Ich habe das cvEnum überprüft, aber es scheint, dass Invet_Method entfernt wurde oder nicht mehr unterstützt wird. Gibt es einen anderen Befehl, den ich ersetzen könnte? [Zeile 660: sift.cs: CvInvoke.cvInvert (H, H_inv.Ptr, Emgu.CV.CvEnum.INVERT_METHOD.CV_SVD); ] –

1

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

Sie können eine Implementierung hier finden, die eine Sift Klasse. Es basiert auf der EmguCV-Bibliothek. Die sift_features (Name ist sehr gegen C# -Konventionen) gibt Ihnen eine Liste von Feature-Objekten zurück, die einen doppelten [] Deskriptor-Member haben.

+0

Ich habe versucht, den Code von Mr. Tabibian implementiert, aber ich bekomme eine Fehlermeldung: Der Typ oder Namespace-Name 'INVERT_METHOD' existiert nicht im Namespace 'Emgu.CV.CvEnum'. Ich habe das cvEnum überprüft, aber es scheint, dass Invet_Method entfernt wurde oder nicht mehr unterstützt wird. Gibt es einen anderen Befehl, den ich ersetzen könnte? [Zeile 660: sift.cs: CvInvoke.cvInvert (H, H_inv.Ptr, Emgu.CV.CvEnum.INVERT_METHOD.CV_SVD); ] –

2

Es gibt kein Hauptprogramm, weil es obvisouly eine Klassenbibliothek ist. Erstellen Sie entweder ein Projekt mit Ihrer bevorzugten IDE und fügen Sie die Quelldateien hinzu, oder öffnen Sie ein Terminalfenster und erstellen Sie die Bibliothek mit dem mitgelieferten Makefile.

0

Dieser Code ist sehr ähnlich zu Surf-Algorithmus 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; 
    } 

Denken Sie daran, librarys hinzuzufügen:

using Emgu.CV; 
using Emgu.CV.Features2D; 
using Emgu.CV.Util; 
using Emgu.CV.Structure; 
using System.Drawing; 

Ich verglich EmguCv und OpenCV SIFT Algorithmen. Die Ergebnisse sind gleich. In beiden Beispielen sind genau die gleiche Anzahl von Features.