2011-08-25 114 views
8

C++中的图像处理/计算机视觉/计算机图形应用程序有哪些调试可用?你用什么来追踪你的方法的错误/部分结果?调试图像处理代码

我迄今发现的是网上只是一个工具,一个用于离线调试:

  1. bmd:连接到正在运行的进程,并允许您查看的内存块作为图像
  2. imdebug:启用调试

的printf风格都较为陈旧,而不是真的是我所期望的。

什么似乎为离线调试有用将成像测井的一些风格,可以说一组让你写在一起的图像与文字(可能是HTML的形式,也许分层)的命令,易于在编译和运行时都会关闭,并且可以获得最少的突兀。

输出看起来是这样的(从我们的简单工具输出):
http://tsh.plankton.tk/htmldebug/d8egf100-RF-SVM-RBF_AC-LINEAR_DB.html

你知道的一些代码,去这个方向?

我将是任何提示感谢。

+0

这是一个非常宽泛的问题。请尝试将其缩小到您所指的特定类型的调试。您是否在问如何收集性能统计信息,如何衡量处理质量,如何查看部分结果或如何调试C/C++代码? –

+0

实际上,我对如何在原理性的调试过程中将图像作为一种信息包含进来的方式感兴趣。因此,除了性能统计信息(在为调试目的而保存大量图像时没有意义),您列出的所有使用情况都是完全有效的。 – tsh

+0

从@phresnel的回答来看,你看起来是对的,我应该把它设置得笔直。我会尝试提供一个示例输出来更好地解释。 – tsh

回答

1

一般来说,我更愿意抛售的bytearray当前处理图像的原始数据三胞胎和运行ImageMagick的,从它创建PNG与数e.g img01.png。通过这种方式,我可以很容易地跟踪算法。 Imagemagick是使用系统调用从程序中的函数运行的。这使得可以在不使用任何外部图像格式的情况下进行调试。

另一种选择,如果您使用的是Qt是QImage的工作,像用于调试一个printf使用img.save(“img01.png”)不时。

+0

只要将图像保存为PNG很容易,正如您所指出的那样,可以使用一些高级库来实现此目的。我只是在问如何处理这种情况,即您有一些伴随图像的文字或其他数据,特别是在有大量图像产生的情况下,会产生一些层次结构。 – tsh

0

它比你在找什么有点简陋,但我已经做了你在使用标准记录您的OP和写入图像文件暗示什么。通常,日志和信号导出过程和分段存在于单元测试中。

信号被给定标识符(通常输入文件名),其可增强(通常进程名或阶段)。

用于开发处理器,它非常方便。

为消息添加html会很简单。在这种情况下,您可以轻松生成可查看的html输出 - 您不需要生成任何html,只需使用html模板文件,然后插入消息即可。

我只想做我自己(因为我已经做了多次,已经为多种信号类型),如果你没有好的推荐。

3

从射线即将跟踪的角度来看,也许其中的一些可视化方法也对你有用(这是我的计划写这样的技术短的一张):

  1. 曲面法可视化。有助于发现表面不连续性。(无图像得心应手,看上去是正常的地图非常让人联想)

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

  2. 距离可视化。有助于找到表面不连续性和找到最近点的错误。 (从矿的一个废弃光线跟踪器拍摄的图像)

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

    enter image description here

  3. 包围盒遍历可视化。帮助可视化边界卷层次结构或其他层次结构,并帮助查看遍历热点,如代码分析器(例如Kd-trees)。 (http://ompf.org/forum的tbp创造了术语Kd-vision)。

    enter image description here enter image description here

    颜色< - number_of_traversal_steps/F

  4. 包围盒可视化(从picogen左右,几年前图像)。有助于验证分区。

    enter image description here

    颜色< - 常量

  5. 立体声。对于真实的立体感外观也许对您的情况有用。我必须承认,我从来没有使用过它来进行调试,但是当我思考它时,它可能在实现新类型的3D基元和树结构时非常有用(来自gladius的图像,这是试图统一实时和非实时射线跟踪)

    enter image description here

    你只呈现略有两幅图像移动的位置,着眼于一些点

  6. 击中或不可视化。可能有助于发现epsilon错误。 (从metatrace拍摄图像)

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

    如果(命中)颜色= const_a; else color = const_b

  7. 一些混合的几种技术。

    1. 线性插补:lerp(debug_a, debug_b)
    2. 交错:if(y%2==0) debug_a else debug_b
    3. 任何的想法组合,例如颜色色调从边界盒可视化,但与实际的场景相交和照明应用

您可能会在http://phresnel.org,http://phresnel.deviantart.com,http://picogen.deviantart.comhttp://greenhybrid.deviantart.com(旧帐户)上发现更多故障和调试图像。

+0

我没有读过任何内容,但为漂亮的照片+1。 – john

+0

...这些漂亮的图片:)并感谢您的参考。 虽然它相当解决了如何可视化数据和获取图像,而不是如何组织大量的输出图像来分析代码。 – tsh

+0

Thx :) @tsh:虽然你的问题包括“计算机视觉/计算机图形学”,并且我认为这个问题线程可能对未来的参考很有意思。图像调试确实是一个很少的话题。 –