Debugging von Bildverarbeitungscode

8

Welche Art von Debugging ist für Bildverarbeitung / Computer Vision / Computergrafik-Anwendungen in C ++ verfügbar? Was verwenden Sie, um Fehler / Teilergebnisse Ihrer Methode zu verfolgen?

Was ich bisher gefunden habe, ist nur ein Tool für Online- und ein Offline-Debugging:

  1. bmd : hängt an einem laufenden Prozess an und ermöglicht es Ihnen, einen Speicherblock als Bild anzuzeigen
  2. imdebug : aktiviert den printf-Stil des Debugging

Beide sind ziemlich veraltet und nicht wirklich das, was ich erwarten würde.

Was für das Offline-Debugging nützlich wäre, wäre eine Art von Bildprotokollierung , sagen wir eine Reihe von Befehlen, die es Ihnen ermöglichen, Bilder zusammen mit Text zu schreiben (wahrscheinlich in Form von HTML, vielleicht hierarchisch) ), sowohl bei der Kompilierung als auch bei der Laufzeit leicht auszuschalten und am wenigsten aufdringlich zu sein.

Die Ausgabe könnte so aussehen (Ausgabe von unserem einfachen Tool):
Ссылка

Ist Ihnen ein Code bekannt, der in diese Richtung geht?

Ich wäre dankbar für Hinweise.

    
tsh 25.08.2011, 09:08
quelle

4 Antworten

3

Aus einer Ray-Tracing-Perspektive kommend, sind vielleicht einige dieser visuellen Methoden auch für Sie nützlich (es ist einer meiner Pläne, ein kurzes Papier über solche Techniken zu schreiben):

  1. Oberflächennormale Visualisierung. Hilft bei der Suche nach Oberflächendiskontinuitäten. (kein Bild praktisch, das Aussehen erinnert sehr an normale Karten)

    color <- rgb (normal.x+0.5, normal.y+0.5, normal.z+0.5)

  2. Entfernungsvisualisierung. Hilft bei der Suche nach einem Punkt in der Nähe auf Diskontinuitäten und Fehler in der Oberfläche. (Bild von einem verlassenen Ray Tracer von mir)

    color <- (intersection.z-min)/range, ...

  3. Begrenzte Volume Traversal Visualization. Hilft dabei, eine Begrenzungsvolumenhierarchie oder andere hierarchische Strukturen zu visualisieren und hilft dabei, die traversalen Hotspots wie einen Code-Profiler (z. B. Kd-Bäume) zu sehen. (tbp von Ссылка hat den Begriff Kd-vision geprägt.)

    color & lt; - Nummer_von_traversalen_steps / f

  4. Begrenzungsbox-Visualisierung (Bild von Picogen oder so, vor einigen Jahren). Hilft, die Partitionierung zu überprüfen.

    color & lt; - const

  5. Stereo. Vielleicht nützlich in Ihrem Fall für die echte stereographische Erscheinung. Ich muss zugeben, dass ich das nie zum Debuggen verwendet habe, aber wenn ich darüber nachdenke, könnte es sich als sehr nützlich erweisen, wenn man neue Arten von 3D-Primitiven und -Trees einführt (Bild von gladius, was ein Versuch war, Echtzeit- und Nicht-Echtzeitstrahl zu vereinheitlichen) Verfolgung)

    Sie rendern nur zwei Bilder mit leicht verschobener Position und fokussieren auf einen Punkt

  6. Hit-or-not-Visualisierung. Kann helfen, Epsilon-Fehler zu finden. (Bild von Metatrace genommen)

    if (hit) color = const_a; else color = const_b

  7. Ein Hybrid aus mehreren Techniken.

    1. Lineare Interpolation: lerp(debug_a, debug_b)
    2. Interlacing: if(y%2==0) debug_a else debug_b
    3. Jede Kombination von Ideen, z. B. der Farbton von Bounding Box Visualization , aber mit tatsächlichem Szenenschnitt und angewendetem Licht

Auf Ссылка , Ссылка finden Sie möglicherweise weitere Fehler und Debugging-Bilder , Ссылка und vielleicht Ссылка (ein altes Konto).

    
Sebastian Mach 26.08.2011 07:06
quelle
1

Im Allgemeinen bevorzuge ich es, das Bytearray des aktuell verarbeiteten Bildes als Rohdatentripel abzuladen und ImageMagick zu starten, um daraus png mit der Nummer z. B. img01.png zu erzeugen. Auf diese Weise kann ich die Algorithmen sehr einfach nachvollziehen. Imagemagick wird von der Funktion im Programm mit Systemaufruf ausgeführt. Dies ermöglicht das Debuggen ohne Verwendung externer Bibliotheken für Bildformate.

Eine weitere Option, wenn Sie Qt verwenden, ist die Arbeit mit QImage und die Verwendung von img.save ("img01.png") von Zeit zu Zeit, wie ein printf zum Debuggen verwendet wird.

    
Ross 25.08.2011 09:29
quelle
0

es ist etwas primitiv im Vergleich zu dem, was Sie suchen, aber ich habe getan, was Sie in Ihrem OP mit Standard-Protokollierung und durch das Schreiben von Bilddateien vorgeschlagen. In der Regel bestehen die Protokollierungs- und Signalexportprozesse und -bereitstellungen in Komponententests.

-Signale erhalten Identifikatoren (oft Eingabedateiname), die erweitert werden können (oft Prozessname oder -stufe).

für die Entwicklung von Prozessoren, es ist ziemlich praktisch.

Das Hinzufügen von HTML für Nachrichten wäre einfach. in diesem kontext können sie leicht eine sichtbare html-ausgabe erzeugen - sie müssten kein html generieren, einfach html-vorlagendateien verwenden und dann die nachrichten einfügen.

Ich würde es einfach selbst machen (wie ich schon mehrmals für mehrere Signaltypen gemacht habe), wenn Sie keine guten Empfehlungen bekommen.

    
justin 25.08.2011 09:52
quelle
0

In Qt Creator können Sie Bildänderungen beobachten, während Sie den Code im normalen C ++ - Debugger durchlaufen, siehe z. Ссылка

    
walt_r 27.08.2011 20:10
quelle