2014-02-18 23 views
0

我有一个问题涉及到一些图像处理算法的单元测试。以图像旋转为例,为了执行图像旋转,通常我们需要两个参数:一个是旋转角度,另一个是重新采样方法,执行图像旋转的函数然后具有以下签名:图像旋转单元测试

void rotate_image(const Image &image, const double rotationAngle, const int rotationMethod, Image &rotatedImage); 

那么,我们如何设计一个好的单元测试框架来测试这个函数呢?目前我唯一能找到的解决方案是:首先通过使用其他先进的软件包(例如,旋转角度和重新采样方法)获取地面实况图像(即旋转图像) ,MATLAB图像处理工具箱);之后获得使用实现的功能的旋转后的图像;最后,比较两张图片。如果差分图像的绝对和小于阈值,则该函数通过单元测试。我想知道是否有其他解决方案可以解决这个问题。谢谢。

+0

如果结果是完全确定的,您可以生成旋转后的图像,直观地验证它(在查看器中打开并验证它确实旋转),将其序列化为文件,然后在单元测试中调用该函数并进行比较存储的(参考)结果。 – utnapistim

+1

对于单元测试,您可以创建您自己的(简单)图像,其中可以*手工计算预期结果*。 – Jarod42

回答

1

一些测试用例进入我的脑海:

  1. 创建一些数据的圆形图案,周围的一切都为黑色。旋转它并验证一些参数,例如平均r g和b值不变。
  2. 创建一系列旋转,导致完整的360°旋转,与原始旋转相比。
  3. 旋转几何图形(矩形)并计算预期结果。
  4. 围绕中心旋转居中的圆,期望不会发生变化。
  5. 旋转90°。每个像素都有一个新的位置,应该没有宽容问题。
  6. 旋转图像+ 90°和-270°。如果你有小的差异,就会有一些不必要的高精度损失。

很明显,在所有情况下你都会有小的精度错误,你必须定义一个容差。