2

我尝试生成可用于转换平面对象图像的随机单应矩阵。似乎opencv有一个类“patchgenerator”。但是我找不到这个类的详细信息。有些人说它只适用于仿射变换。有什么方法可以生成随机单应矩阵吗?或者我可以直接使用一些 OpenCV 功能?很多谢谢!

4

3 回答 3

5

这篇文章解释了如何从头开始生成随机单应性——你可以控制旋转、平移、剪切和投影失真:

https://medium.com/uruvideo/dataset-augmentation-with-random-homographies-a8f4b44830d4

为了简要总结上面的链接,单应性可以写成欧几里得变换、仿射/剪切变换和射影变换矩阵的乘积。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

于 2017-09-18T20:00:10.353 回答
2

您可以通过将随机缩放、平移和旋转矩阵相乘来构建单应矩阵:

H = T . S . R

可以通过使用例如欧拉角(三参数旋转)来生成旋转矩阵。

平移矩阵是一个单位矩阵,最后一列条目对应于每个维度中的点平移。

最后,缩放矩阵在其对角线上的每个维度都有缩放条目。

最终的单应矩阵H可以通过将其除以其最后一个条目(右下角)来归一化。你可以检查这个条目是不是太小(如果你需要2D单应性并将变换后的点投影在同一平面上)。

这种方法的优点是可以更好地控制您的参数(例如,平移对应于您使用的典型平移量)并且只要三个简单矩阵也是可逆的,就保证生成的单应性是可逆的。

当然,例如,您可以为单位正方形生成表现良好的单应性,然后缩放矩阵以适合您的实际问题(例如,以像素为单位的图像大小)。

于 2016-07-17T16:28:30.660 回答
-1

单应性还具有剪切和投影分量。你所描述的是一个仿射变换。

于 2017-03-21T20:25:10.757 回答