是否检测不垂直的线(垂直和水平线)并以此对齐图像?

时间:2018-12-12 19:37:38

标签: python opencv alignment surf hough-transform

嘿,

是否可以使用Python根据不直的图像中的线自动对齐图像? 例如,如果我有这张图片:

enter image description here

我要自动查找不直的线,如图所示: enter image description here enter image description here enter image description here

找到这条线后,我想根据它对齐图像,因此图像将是这样(此图像是使用Lightroom在此方法中手动对齐的): enter image description here

你们在如何做这样的事情上有什么先驱,也许有人写的算法可以做类似的事情? 首先,我尝试使用ORB和ECC方法对齐图像,但是它没有给我可以使用的精确结果, 因此,我想到了使用更智能的方法并真正找到线的方法,但是当我尝试使用hough line transform查找线时,结果是线的分布到了整个地方(由于砖之间的细线)。

我在线搜索,发现多伦多大学的lecture对此进行了讨论,但如上所述,我无法弄清楚如何实现这些方法以创建这样的算法, Python非常复杂。

1 个答案:

答案 0 :(得分:1)

使用霍夫变换,您处在正确的轨道上。是的,有很多行。 您无法描述是什么使您想要的行与您不需要的行(在各种未指定的细节中)有所区别,但是让我尝试为您提取一些想法:

  • 垂直或水平附近的坡度。
  • 每个方向上的最长线。

使用Hough查找所有可能的行。运行另一遍将一系列线段(拟合相同的线性方程式?)连接成更长的线。例如,即使它穿过水槽的后面,您也应该能够识别出浴帘的左边缘。

现在,您至少需要每个方向上最长的线。还要考虑“框架”情况:如果该线偏离中心(例如,在照片的外侧25%),那么还要在相同方向上但在另一侧寻找一条足够长的线。

这些过程中的每一个都可以很容易地量化并用基本线性代数检查。您可以通过适当地对线段进行排序以增强每个操作来简化此过程。

有足够的轮廓和提示让您感动吗?