2011-08-25 25 views
8

¿Qué tipo de depuración está disponible para aplicaciones de procesamiento de imágenes/visión artificial/gráficos de computadora en C++? ¿Qué usas para rastrear errores/resultados parciales de tu método?Depuración del código de procesamiento de imágenes

Lo que he encontrado hasta ahora es sólo una herramienta para la línea y uno para fuera de línea depuración:

  1. bmd: se conecta a un proceso en ejecución y le permite ver un bloque de memoria como una imagen
  2. imdebug: permite al estilo printf de depuración

Ambos son bastante anticuado y no es realmente lo que se esperaría.

¿Qué le parece útil para fuera de línea depuración sería cierto estilo de imagen tala, digamos que un conjunto de comandos que le permiten subir las imágenes junto con el texto (probablemente en forma de HTML, tal vez jerárquica), fácil de apágalo tanto en tiempo de compilación como de ejecución, y lo menos molesto posible.

La salida podría tener este aspecto (salida de nuestra herramienta sencilla):
http://tsh.plankton.tk/htmldebug/d8egf100-RF-SVM-RBF_AC-LINEAR_DB.html

¿Sabe usted de algún código que va en esta dirección?

Agradecería cualquier pista.

+0

Esta es una pregunta muy general con un alcance muy amplio. Intenta restringirlo al tipo específico de depuración al que te refieres. ¿Está preguntando cómo recopilar estadísticas de rendimiento, cómo medir la calidad de procesamiento, cómo ver resultados parciales o cómo depurar su código C/C++? –

+0

En realidad, estoy interesado en una forma de cómo incluir imágenes como un tipo de información en un proceso de depuración de una manera basada en principios. Así que a excepción de las estadísticas de rendimiento (que no tienen sentido cuando se guardan muchas imágenes para fines de depuración), todos los escenarios de uso que enumera son perfectamente válidos. – tsh

+0

A juzgar por la respuesta de @phresnel, parece que tienes razón y debo aclararlo. Trataré de producir un resultado de muestra para explicar mejor. – tsh

Respuesta

1

En general, prefiero volcar bytearray de la imagen que se está procesando como tripletes de datos sin procesar y ejecutar Imagemagick para crear png de ella con el número img01.png por ejemplo. De esta manera puedo rastrear los algoritmos muy fácil. Imagemagick se ejecuta desde la función en el programa utilizando la llamada al sistema. Esto hace posible la depuración sin utilizar ninguna biblioteca externa para formatos de imagen.

Otra opción, si usa Qt es trabajar con QImage y usar img.save ("img01.png") de vez en cuando como si se utilizara una printf para la depuración.

+0

Solo guardar una imagen como PNG es fácil, como usted señala, uno puede usar alguna biblioteca de alto nivel para lograr eso. Prefiero preguntar cómo manejar una situación en la que tenga datos textuales o de otro tipo que acompañan a la imagen, y especialmente en casos en los que hay una gran cantidad de imágenes producidas con alguna jerarquía. – tsh

0

que es un poco primitivo en comparación con lo que está buscando, pero he hecho lo que usted sugiere en su OP utilizando el registro estándar y escribiendo archivos de imagen. típicamente, los procesos de registro y exportación de señales y estadificación existen en pruebas unitarias. identificadores

señales se dada (a menudo de nombre de archivo de entrada), que puede estar aumentada (a menudo el nombre de proceso o etapa).

para el desarrollo de procesadores, es bastante útil.

Agregar html para los mensajes sería simple. en ese contexto, podría producir resultados html visibles fácilmente; no necesitaría generar ningún html, simplemente use archivos de plantilla html y luego inserte los mensajes.

yo sólo lo haría yo mismo (como lo he hecho varias veces ya para varios tipos de señal) si no obtiene buenas referencias.

3

Viniendo de un trazado de rayos perspectiva, tal vez algunos de esos métodos visuales también son útiles para usted (que es uno de mis planes de escribir un breve artículo sobre estas técnicas):

  1. superficie una visualización normal . Ayuda a encontrar discontinuidades en la superficie.(Sin práctico de la imagen, la apariencia es muy reminiscencia de mapas normales)

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

  2. Distancia de visualización. Ayuda a encontrar discontinuidades en la superficie y errores para encontrar el punto más cercano. (Imagen tomada de un trazador de rayos abandonada de la mina)

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

    enter image description here

  3. Condiciones de selección Visualización de recorrido de volumen. Ayuda a visualizar una jerarquía de volumen límite u otras estructuras jerárquicas, y ayuda a ver las zonas de acceso transversal, como un generador de perfiles de código (por ejemplo, árboles Kd). (tbp de http://ompf.org/forum acuñó el término Kd-vision).

    enter image description here enter image description here

    de color < - number_of_traversal_steps/f

  4. cuadro delimitador Visualización (imagen a partir de picogen más o menos, hace algunos años). Ayuda a verificar la partición.

    enter image description here

    de color < - const

  5. estéreo. Quizás sea útil en su caso en cuanto a la apariencia estereográfica real. Debo admitir que nunca utilicé esto para la depuración, pero cuando lo pienso, podría ser muy útil cuando se implementan nuevos tipos de primitivas y árboles 3d (imagen de gladius, que fue un intento de unificar rayos en tiempo real y no en tiempo real) rastreo)

    enter image description here

    Usted acaba de hacer dos imágenes con poco cambió de posición, centrándose en algún momento

  6. de acertar o no la visualización. Puede ayudar a encontrar errores epsilon. (Imagen tomada de metatrace)

    http://th01.deviantart.net/fs70/PRE/f/2010/309/b/0/debugging_a_c___in_s_anity_by_phresnel-d327c6w.png

    si (hit) Color = const_a; else color = const_b

  7. Algún híbrido de varias técnicas.interpolación

    1. lineal: lerp(debug_a, debug_b)
    2. entrelazado: if(y%2==0) debug_a else debug_b
    3. Cualquier combinación de ideas, por ejemplo, el color de tono de cuadro delimitador Visualización, pero con real escena-intersección y la iluminación aplicada

Puede encontrar más errores e imágenes de depuración en http://phresnel.org, http://phresnel.deviantart.com, http://picogen.deviantart.com, y quizás en http://greenhybrid.deviantart.com (una cuenta anterior).

+0

No leí nada, pero +1 para las imágenes bonitas. – john

+0

... bonitas imágenes son :) Y gracias por las referencias. Aunque resuelve cómo visualizar los datos y obtener una imagen, no cómo organizar muchas imágenes de salida para analizar el código. – tsh

+0

Thx :) @tsh: Aunque su pregunta incluía "visión artificial/gráficos por computadora", y pensé que este hilo de preguntas podría ser interesante para futuras referencias. La depuración de imágenes es realmente un tema poco frecuente. –

0

En Qt Creator puede ver la modificación de la imagen mientras recorre el código en el depurador normal de C++, consulte p. Ej. http://labs.qt.nokia.com/2010/04/22/peek-and-poke-vol-3/

+0

Es una pena que dependa de Qt, de lo contrario sería bastante útil. De todos modos, gracias por el enlace. – tsh

Cuestiones relacionadas