2012-05-01 120 views
1

我有一个程序,需要拍摄由iPhone(或任何一种像样的相机)拍摄的照片,边缘周围有厚厚的黑色寄宿生。此图像可以接收旋转到右侧或左侧(不需要担心倾斜)。我已经有了一个原始状态的网格图像,但是我需要获取我正在拍摄的图像并将其旋转到“完美/原始”状态。将图像旋转回初始状态

理念1:性能生猪/坏的结果

阈值,我收到的画面和完美的格栅图像我已经有了。将每个像素进行0次旋转比较,得到总分,并保存。这样做是否将增量图像旋转1到359.最低分数是我们需要将图像恢复到原始状态的旋转。

理念2:还是不知道该如何去这样做

阈值,我收到的画面和完美的格栅图像我已经有了。垂直和水平地在图片中心画一条线。根据垂直和水平线通过的黑色像素数找到旋转。这需要某种三角函数,我不太理解。

有没有人有任何其他想法得到这个工作?

任何帮助指引我在正确的方向将不胜感激!

谢谢!

+0

Trig很简单...只记得SOHCAHTOA:http://en.wikipedia.org/wiki/Trigonometry –

+0

是的,我明白,但如果我只知道斜边和明显的90度角,我该如何计算出其他两个距离找到theta(旋转的度数回到原来的状态) –

回答

2

不是绘制一条水平线和一条垂直线,而是绘制两条水平线(也就是说,每个线位于图片的三分之一处)。只看这些线的左半部分,并计算每个线的路径上有多少黑色像素(a1a2)。您还必须跟踪两条红线之间的距离,因此像素数为d

Diagram of the problem, as I understand it

在图中使用该表示法的上方,您所希望的角度是:

alpha=atan2((a2-a1),d)

和由alpha逆时针旋转将使图象的白色部分为正确对准。

+0

我刚刚意识到我忘了提及这种方法容易产生噪音。随着'd'的增加,错误会减少,但如果选择'd'太大,该方法根本无法工作(红线不会与正确的边相交)。此外,图片的某些部分可能会有黑色像素,导致您的测量不可用。作为第二步,您可以针对不同的d值和图像的四个不同侧重复此过程几次,然后对测量结果进行平均,并选择一个可选步骤来丢弃异常值。 – vlsd