【问题标题】:Rotating an image back to it's original state将图像旋转回其原始状态
【发布时间】:2012-05-01 04:52:08
【问题描述】:

我有一个程序需要拍摄由 7x10 网格的 iphone(或任何类型的像样的相机)拍摄的照片,边缘有厚厚的黑色边框。该图像可以向右或向左旋转接收(无需担心歪斜)。我已经有了原始状态的网格图像,但我需要获取我正在拍摄的图片并将其旋转到“完美/原始”状态。

想法 1:表现不佳/糟糕的结果

阈值我收到的图片和我已经拥有的完美网格图像。比较每个像素0旋转,得到总分,保存。这样做将增量图像旋转 1 到 359。最低分数是我们需要将图片恢复到原始状态的旋转。

想法 2:仍然不确定如何去做

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

有没有人有任何其他的想法让这个工作?

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

谢谢!

【问题讨论】:

  • Trig 很简单...只要记住 SOHCHAHTOA:en.wikipedia.org/wiki/Trigonometry
  • 是的,我明白,但如果我只知道斜边和明显的 90 度角,我如何计算出其他两个距离以找到 theta(旋转度数以回到原来的州)

标签: java image image-processing trigonometry image-rotation


【解决方案1】:

不要画一条水平线和一条垂直线,而是画两条水平线(例如,每条线位于图片的三分之一处)。只看这些线的左半部分并计算每条路径上有多少黑色像素(a1 和a2)。您还必须跟踪两条红线之间的距离,即d 的像素数。

使用上图中的这个符号,你想要的角度是:

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

逆时针旋转alpha 将使图片的白色部分正确对齐。

【讨论】:

  • 我刚刚意识到我忘了提到这种方法容易产生噪音。随着d 的增加,错误会减少,但是如果您选择的d 太大,则该方法根本不起作用(红线不会与正确的边相交)。此外,图片的某些部分可能有黑色像素,会影响您的测量。第二步,您可以针对d 的不同值和图像的四个不同侧面重复此过程多次,然后对测量值进行平均,并可选择剔除异常值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多