前言:我没有用python做过多的图像处理.我可以给你一个图像处理建议,但你必须自己用Python实现它.你所需要的只是一个FFT和一个极化变换(我认为OpenCV有一个
in-built function for that),所以这应该是直截了当的.
您只发布了一个样本图像,所以我不知道这是否适用于其他图像,但对于此图像,傅里叶变换可能非常有用:只需将图像填充到2的良好幂(例如2048×2048)你会得到这样的傅里叶谱:
我已经发布了傅里叶变换here的直观解释,但简而言之:您的图像可以表示为一系列正弦/余弦波,并且大多数“波”与文档方向平行或垂直.这就是为什么你会在大约0°,90°,180°和270°处看到强烈的频率响应.要测量精确的角度,您可以采用傅里叶谱的极坐标变换:
并简单地采取列方式:
该图中的峰值位置为90.835°,如果我将图像旋转-90.835模90,则方向看起来不错:
就像我说的,我没有更多的测试图像,但它适用于图像的旋转版本.至少它应该缩小搜索空间以获得更昂贵的搜索方法.
注1:FFT速度很快,但显然需要更多时间才能拍摄更大的图像.遗憾的是,获得更好的角度分辨率的最佳方法是使用更大的输入图像(即在源图像周围有更多的白色填充.)
注2:FFT实际上返回的图像中“DC”(上面的光谱图像中心)位于原点0/0.但是如果将它移动到中心,旋转属性会更清晰,并且它使极坐标变换更容易,所以我只显示了移位版本.