如何检测 C# 中 2 个图像之间的旋转角度?

How can I detect rotation angle between 2 images in C#?

我有 2 张图片,一张是原始图片,里面有网格,另一张是同一张图片,只是在这些网格中写了数字,并且被旋转了,我应该找到那个的旋转角度图像,这样我就可以把它弄直并识别写的那些数字。

对于数字,我可能会将它们放在二维像素阵列中并查看图案,但我真的不明白如何编写代码来检测旋转角度。这已在此处得到解答 Calculating translation value and rotation angle of a rotated 2D image,但我不知道如何将该代码转换为 C#。

此外,我不能使用任何为我完成所有这些工作的库,我需要从头开始实现该算法。我只能使用字节数组和位图 class.

图片示例如下:

这个答案只是关于你应该如何去做的一个想法,而不是使用的确切代码。

您可以做的是 "scan" 在页面下方获取 X 和 Y 位置的像素值。从左上角附近开始(实际位置可以从您的示例图像中确定),然后从我的示例中第一条红线所在的位置开始向下扫描,直到您找到接近黑色的颜色。记录这个位置并为另一侧做同样的事情。有了这两点,就可以算出angle between them, and translate your image accordingly.

为了减少误报,找到这些位置后,您可以向下跳过 X 个像素,直到找到下一行,并确保它与第一个结果的角度或预期距离相同。 (绿色箭头)

如果你能改变这篇论文,我建议添加更大的线条来表示行的位置(在每边,这样可以找到一个角度),类似于这张 bubble sheet