4 Stimmen

Verbesserung der Geschwindigkeit der Histogramm-Rückprojektion

Ich verwende derzeit die in OpenCV integrierte patch-basierte Histogramm-Rückprojektion ( cv::calcBackProjectPatch() ), um Bereiche eines Zielmaterials in einem Bild zu identifizieren. Bei einer Bildauflösung von 640 x 480 und einer Fenstergröße von 10 x 10 benötigt die Verarbeitung eines einzelnen Bildes ~1200 ms. Obwohl die Ergebnisse großartig sind, ist dies für eine Echtzeitanwendung (die eine Verarbeitungszeit von nicht mehr als ~100 ms haben sollte) viel zu langsam.

Ich habe bereits versucht, die Fenstergröße zu verringern und von CV_COMP_CORREL a CV_COMP_INTERSECT um die Verarbeitung zu beschleunigen, haben aber keine nennenswerte Beschleunigung festgestellt. Dies kann durch die OpenCV-Dokumentation erklärt werden (Hervorhebung von mir):

Jedes neue Bild wird gemessen und dann in eine Bildmatrix umgewandelt über eine ausgewählte ROI umgewandelt. Histogramme werden von diesem Bild in einem Bereich der von einem "Patch" mit einem Anker in der Anker in der Mitte, wie in der Abbildung unten gezeigt. Das Histogramm wird mit dem Parameter Parameter norm_factor normalisiert, damit es mit hist verglichen werden kann. Das berechnete Histogramm wird mit dem Modell verglichen histogram verglichen; hist verwendet die Funktion cvCompareHist() mit dem Vergleich methode= method ). Das Ergebnis Ausgabe wird an der Stelle platziert, der dem Patch-Anker im dem Wahrscheinlichkeitsbild dst. Diese Vorgang wird wiederholt, wenn der Fleck über die ROI gleitet. Iteratives Histogramm Aktualisierung durch Subtraktion der letzten Pixel Pixel, die von dem Fleck bedeckt sind, und Hinzufügen abgedeckten Pixel zum Histogramm kann viele Operationen sparen, obwohl es noch nicht implementiert.

Dies wirft bei mir einige Fragen auf:

  1. Gibt es eine andere Bibliothek, die iterative Histogramm-Updates unterstützt?
  2. Wie groß ist der Geschwindigkeitszuwachs, den ich von einer iterativen Aktualisierung erwarten kann?
  3. Gibt es noch andere Techniken, um diese Art von Vorgang zu beschleunigen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X