Also, wie kann ich vlubcmatch Funktion in C-Code nennen Dies ist eine MEX-Funktion, die nur von MATLAB aufgerufen werden soll. Sie können es nicht wieder verwenden - aus einem Allzweck-C-Programm. Das Ziel zu erkennen, ob ein Bild das Objekt in einem anderen Bild enthält. Wie man SIFT Matching Algorithmus zu tun, wenn ich vlfeat VLFeat C API verwenden nicht bieten SIFT Matching-Funktionen out-of-the-Box. Also grundsätzlich musst du den so genannten Ratio-Test 1 Code-Bereich von diesem MATLAB C Code Abschnitt anpassen, der ziemlich einfach ist (siehe unten). Der Hauptnachteil, wenn Sie eine robuste Übereinstimmung durchführen wollen, ist, dass diese Funktion die Geometrie nicht berücksichtigt. I. e die Keypoints koordiniert. Was Sie zusätzlich benötigen, ist eine geometrische Konsistenzprüfung, die typischerweise durchgeführt wird, indem man herausfindet, ob es eine Homographie zwischen den beiden Bildern gibt (wobei als Eingabe die mit dem Verhältnis-Test erhaltenen Deskriptor-Korrespondenzen verwendet werden). Dies geschieht mit einem Algorithmus wie RANSAC, da die Korrespondenzen Ausreißer enthalten können. Aber auch Sie können die Korrespondenzberechnung mit einem kd-Baum beschleunigen. Also eine Alternative, wenn man eine einfache C-Implementierung braucht, setzt auf Open SIFT von Rob Hess, der alles beinhaltet, was man braucht, sowie ein fertiges Kommandozeilen-Tool (und damit Beispiel) von Matching: K1. Anzahl der Deskriptoren in Bild 1, K2. Anzahl der Deskriptoren in Bild 2, ND. Deskriptor Dimension (128 für SIFT), descr1 und descr2. Deskriptoren von Bild 1 und 2 bzw. In Zeile Großauftrag, z. B. K1 Zeilen x ND Spalten), Schwellenwert. Verhältnis-Testschwellenwert, z. B. 1,5 im MATLAB-Code. Sie verwenden die vlfeat-Bibliothek auf die gleiche Weise, wie Sie eine andere Bibliothek mit C verwenden. Stellen Sie zunächst sicher, dass Sie die Bibliothek auf Ihrem Computer installiert haben und wissen, wo sie installiert ist. Sie müssen den erforderlichen Header für jeden Teil von vlfeat, den Sie verwenden, enthalten. Im Allgemeinen ist ein generischer Bibliotheksheader für vlfeat und dann ein spezifischer Header für Sift (z. B. sift. h) (manchmal gibt es keinen allgemeinen Header). Sie müssen versichern, gcc oder g-Befehl enthält die richtige INCLUDEPATH und LIBRARYPATH für Ihre Umgebung, die gcc erlauben, Ihre vlfeat-Dateien zu finden. (Z. B. - Ipathtodirholdingsift. h und - Lpathtovlfeatlib) So wirst du am Ende mit so etwas für C: Es gibt Dokumentation auf Linie, die helfen wird. Siehe: Wie man ein Basis-C-Projekt einrichtet, das die VLFeat-Bibliothek verwendet Wenn Sie weitere Fragen haben, lassen Sie einfach eine Zeile in die Kommentare. Beantwortet 14. November 14 um 8:07 Die C-APIs sind auf vlfeat. orgapisift. html beschrieben. Es gibt nur Sift-Deskriptor-Generierung (Extrahieren) API gibt. Ich kann keine passende API finden. Und in der Quelle finde ich vlubcmatch. c, was einen quatanischen Matching Algorithmus macht. Aber ich weiß nicht, wie ich diese Algorithmus-Funktion in dieser. c-Datei aufrufen kann (wo es viele Makros-Definitionen gibt, die mit Matlab verwandt sind). Meine Hauptfrage ist, wie man SIFT Matching Algorithmus zu tun, wenn ich vlfeat ndash mrmoment verwenden 14. November 14 um 8:52 Das war der Hauptteil der Antwort. Sie werden sift. h in Ihrem Code zusammen mit dem anderen enthalten (stdio. h etc ..). Sie verwenden dann die Funktion, mit den richtigen Argumenten wie in sift. h in Ihrem Code angegeben. Sie werden dann den Code kompilieren (entweder gcc oder g) spezifiziert die Bibliothek - lvl so der Linker weiß, um diesen Code enthalten, und Sie können nicht brauchen, um die - I47path andor - L47path zu haben, um gcc und ld finden die lib und sift. H Header je nach Umgebung. Keine Tricks Ndash David C. Rankin 14. November 14 um 8: 56vlfeat-ctypes 0.1.1 Ein minimaler Ctyp-basierter Port von einigen vlfeat-Funktionen. Dies ist ein minimaler Port von wenigen Komponenten der Matlab-Schnittstelle der vlfeat-Bibliothek für Computer Vision zu Python. Vlfeats Kernbibliothek ist in C geschrieben. In der Praxis liegt jedoch eine signifikante Menge der Bibliothek in der MATLAB-Schnittstelle. Dieses Projekt ist ein Port von ein paar Funktionen von dieser Schnittstelle zu pythonnumpy, mit Ctypes. Es enthält nur wenige Funktionen (die für py-sdm benötigt). Der Prozess ist nicht sehr hart, es dauert nur etwas Aufwand. Patches, die zusätzliche Funktionalität hinzufügen, sind willkommen. Theres auch eine Gabel von vlfeat schwimmen um das schließt Boost :: Python Wrapper. Ich konnte nicht, dass es zu arbeiten, und didnt versuchen zu hart, weil ich sah, dass einige der Funktionen, die ich brauchte, hatte erhebliche Mengen an Matlab-Code sowieso. Sie könnten sich daran interessieren, obwohl die Version von Andreas Muellers die zuletzt aktualisierte Version zu sein scheint. Installation Das Paket kann per Pip oder easyinstall normal installiert werden. Allerdings, um es tatsächlich zu benutzen, müssen Sie auch die vlfeat binäre Bibliothek herunterladen. Sie können entweder installieren libvl. so (oder Ihre Plattformen gleichwertig) irgendwo, wo Ctypen können es selbst finden, oder verwenden Sie das enthaltene Skript für dies tun, laufen Sie es mit Python - m vlfeat. download. Wenn du ein - h-Argument hinzufügst, zeigst du es dir, wie man es mit einer vorab heruntergeladenen Binärverteilung macht. Wenn Sie Python-Pakete mit sudo installieren. Möglicherweise müssen Sie das gleiche für das Download-Skript tun. Repository-Zugriff VLFeat ist unter aktiver Entwicklung. Sie können unser Git-Repository durchsuchen oder es herunterladen (dies erfordert Git, um installiert zu werden). Die Spitze des Master-Zweigs entspricht der aktuellsten Version von VLFeat, aber es könnte instabil sein. Wir begrüßen Beiträge zur Dokumentation und zum Quellcode von VLFeat. Sie können Patches gegen unser Git-Repository erstellen und sie uns zur Einbindung in die nächste Version schicken. Es gibt zwei Möglichkeiten, einen Beitrag zu leisten. Für kleinere Änderungen, einfach klonen Sie unser öffentliches Repository, wie oben erklärt. Sobald Sie Ihre Änderungen lokal vorgenommen und begangen haben, können Sie sie dem Projekt per E-Mail über einen Befehl wie git format-patch übermitteln. Für größere Ergänzungen bevorzugen wir die Zusammenarbeit mit github. Befolgen Sie ihre Tutorial, um unser Projekt zu gabeln und senden Sie Ihre Änderungen mit einem Zug-Anfrage.
Comments
Post a Comment