Vasya开始在IT城的一家机器视觉公司工作。Vasya的团队创建了通过人脸识别人的软件和硬件。
该项目的诀窍之一是相机在拍摄时围绕其光轴旋转。人们看到一个醒目的小玩意--旋转的相机--走到它面前,想更好地看它,看它。而相机就在那时拍下了他们的照片。还有什么能比这更有利于高质量的识别呢?
但并非一切都那么简单。摄像机拍摄的照片也是旋转的(在顺时针方向的摄像机旋转框架上,内容会变成逆时针方向的旋转)。但识别算法只能在脸部稍微偏离垂直的情况下工作。
Vasya被委托来纠正这种情况--旋转拍摄的图像,使图像与垂直方向的偏差最小。要求很严格。首先,图片应该只旋转90度的角度,以便不丢失任何关于图片的信息。其次,摄像机的帧数非常大,FPS也非常大,只有硬件FPGA解决方案才能提供足够的旋转速度。而且这个解决方案只能顺时针旋转90度。当然,人们可以多次应用90度旋转,但为了性能,应该尽量减少旋转的次数。
帮助Vasya实现一个程序,通过给定的相机旋转角度,可以确定为获得与垂直方向偏差最小的图片所需的顺时针旋转90度的最小次数。
下图包含了从未旋转的相机拍摄的画面,然后是顺时针旋转90度的画面,然后是逆时针旋转90度的画面。箭头显示的是 "真实上升 "的方向。
下图显示了FPGA硬件的90度顺时针旋转。
Note
当摄像机逆时针旋转60度时(第二个例子),它的图像也顺时针旋转60度。图像顺时针旋转90度的结果是顺时针旋转150度,与 "真实上升 "的偏差为150度。图像顺时针转两圈,总旋转角度为240度,两圈的偏差为120度,因为顺时针240度等于逆时针120度。图像顺时针转三圈,总旋转度为顺时针330度,转三圈时与 "真实状态 "的偏差为30度,因为顺时针330度等于逆时针30度。
从60度、150度、120度和30度的偏差中,最小的是30度,它是在顺时针转三圈后实现的。