C++ 图像旋转单元测试

C++ 图像旋转单元测试,c++,image,matlab,unit-testing,rotation,C++,Image,Matlab,Unit Testing,Rotation,我有一个关于一些图像处理算法的单元测试的问题。以图像旋转为例,为了执行图像旋转,通常需要两个参数:一个是旋转角度,另一个是重采样方法,执行图像旋转的函数具有以下特征: void rotate_image(const Image &image, const double rotationAngle, const int rotationMethod, Image &rotatedImage); 那么,我们如何设计一个好的单元测试框架来测试这个功能呢?目前,我能找到的唯一解决方案是

我有一个关于一些图像处理算法的单元测试的问题。以图像旋转为例,为了执行图像旋转,通常需要两个参数:一个是旋转角度,另一个是重采样方法,执行图像旋转的函数具有以下特征:

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

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

我想到了一些测试用例:

  • 创建一个包含一些数据的圆形图像,周围的一切都是黑色的。旋转它并验证某些参数(例如平均r g和b值)不变
  • 创建一系列旋转,与原始旋转相比,旋转360°
  • 旋转几何图形(矩形)并计算预期结果
  • 围绕中心旋转一个中心圆,预计不会发生变化
  • 旋转90°。每个像素都有一个新的位置,应该没有公差问题
  • 将图像旋转+90°和-270°。如果差异很小,则会有一些不必要的高精度损失

  • 显然,在所有情况下都会有小的精度错误,您必须定义一个公差。

    如果结果是完全确定的,您可以生成旋转的图像,直观地验证它(在查看器中打开并验证它是否确实旋转),将其序列化为一个文件,然后在单元测试中,调用函数并与存储的图像进行比较(参考)结果。对于单元测试,您可以创建自己的(简单)图像,其中可以手动计算预期结果。