Erstellen eines OpenCV-Haar-Klassifizierers aus einem vorhandenen Modell

8

Ich möchte eine Anwendung machen, die Schrauben erkennt. Es gibt einen Standard für jede Schraubengröße und -form, und es gibt Software, die ein 360-Grad-3D-Modell jeder Schraube (zum Beispiel Autocad) bereitstellt.

Ich wollte wissen, ob es eine Möglichkeit gibt, ein existierendes Modell (mit einer Erweiterung) zu erstellen und ein Haar classifier daraus zu erstellen.

Wenn es nicht klar war, möchte ich nicht Tausende von Bildern von jedem Modell machen. Ich möchte die vorhandenen Modelle irgendwie wiederverwenden

Danke

    
Android Joker 17.04.2014, 18:01
quelle

2 Antworten

4

Kurz gesagt: Ich denke nicht, dass es möglich ist, es sei denn, Sie können Ihre 3D-Modelle realistisch nach verschiedenen Lichtverhältnissen darstellen.

Haar- und LBP-Klassifikatoren verwenden irgendeine Art von Texturinformation, so dass die reine Forminformation nicht ausreicht, afaik. (Anstelle von HAAR könnte HoG für einen solchen Ansatz geeigneter sein oder auch nicht).

Sie können Ihre 3D-Modelle mit verschiedenen Material- und Lichtverhältnissen und in verschiedenen Posen rendern. Sie benötigen Hintergrundbilder jedoch als negative Beispiele und als Hintergrund für Ihre gerenderten Schrauben (Sie könnten die Schrauben aber auch später mit dem opencv_createsamples-Werkzeug zusammenführen).

Je nachdem, wie realistisch oder angemessen Sie die Screws darstellen können, können Sie diese für Ihr Training verwenden. Beachten Sie, dass in Wirklichkeit zwei Schrauben des gleichen Typs nicht perfekt gleich aussehen, die Länge in kleinen Mengen variieren kann (abhängig von der Produktionsqualität) und es möglicherweise zu Deformationen oder "Rauschen" wie Grate kommen kann, die sich von denen unterscheiden das perfekte Modell, vielleicht müssten Sie das bei Ihrer Wiedergabe berücksichtigen.

Beachten Sie außerdem, dass die Kaskadenklassifizierer haar und lbp am besten funktionieren, wenn sie eine Klasse nur aus einer einzigen Pose (wie Frontalflächen oder Profilflächen, nicht beide gleichzeitig) abdecken, dies reduziert die Verwendung von a signle 3D-Modell.

Manchmal können 3D-Modelle in Kombination mit Fasenanpassung verwendet werden, um sie mit 2D-Modellen zu vergleichen.

    
Micka 30.11.2017 09:12
quelle
3

Ein Haar-Klassifizierer arbeitet mit 2D-Bildern, sowohl für das Training als auch für die Erkennung. Es erfordert einen Satz normalisierter positiver 2D-Bilder (mit Schraube) und einen Satz normalisierter negativer 2D-Bilder (ohne Schraube) zum Trainieren des Klassifikators. Es kann also nicht mit einem 3D-Modell direkt trainiert werden, wenn das Ihre Frage ist. Natürlich könntest du 2D-Bilder mit dem 3D-Modell rendern, aber so wie ich deinen Kommentar am Ende deiner Frage verstanden habe, ist das nicht das, was du gerne machen würdest.

Außerdem ist ein Haar-Klassifikator wahrscheinlich nicht die Methode der Wahl, abhängig von Ihrer eigentlichen Aufgabe. Einige wichtige Fragen sind: Können Sie die Schraube im Bild segmentieren? Kann es im Bild mehrere Schrauben geben? Ist es eine Klassifizierungsaufgabe oder wissen Sie, welcher Schraubentyp im Bild vorhanden ist? Benötigen Sie eine Lokalisierung oder geht es nur um Anerkennung? Sind die möglichen Posen Ihrer Schrauben eingeschränkt (oder können sie vorher durch Segmentierung normalisiert werden)?

Beachten Sie, dass ein Haar-Klassifikator dazu gedacht ist, Variationen des Aussehens verschiedener Instanzen einer Klasse mit ähnlicher Pose (wie mehr oder weniger aufrechte Gesichter verschiedener Personen, dh Gesichtserkennung) zu "lernen" und nicht für völlig unterschiedliche Posen von das gleiche Objekt, nicht einmal in 2D, um nicht einmal über 3D zu reden. Es könnte also nur in einem sehr eingeschränkten Szenario anwendbar sein.

UPDATE: Ein paar Hinweise, um dich in die richtige Richtung zu führen:

  1. Wenn Sie die Schrauben segmentieren können und eine einfache Annäherung versuchen möchten, versuchen Sie, sie als ein 2D-Problem zu behandeln (vorausgesetzt, die Schrauben stehen nicht aufrecht) und führen Sie eine Normalisierung auf der Grundlage von Bildmomenten durch.

    >
  2. Wenn Sie die Schrauben segmentieren können und sie als 2D / 3D-Problem behandeln möchten (ein 3D-Modell, das auf ein 2D-Bild projiziert wird), können Sie in mein (jetzt altes) research zum effizienten Aussehen-basierten Abgleich mit Ansichten, die mit einem 3D-Modell erstellt wurden.

  3. Wenn Sie die Schraube nicht segmentieren können und Sie wissen, welche Art von Schraube in dem Bild vorhanden ist, können Sie in die sogenannte geometrische Musteranpassung von einer Industriemessungsbibliothek, z. Formbasiertes Matching von Halcon. Es bietet auch Training von CAD-ähnlichen Daten.

  4. Wenn Sie die Schraube nicht segmentieren können und Sie nicht wissen, welche Art Schraube im Bild vorhanden ist, können Sie ein Deep Convolutional Neural Network für die Klassifikationsaufgabe trainieren und dann zur Verifizierung und Lokalisierung 3. verwenden.

Pedram Azad 29.11.2017 21:33
quelle