python - 如何在光学测距仪中测量图像重合度

标签 python opencv image-processing python-imaging-library

我有几个 USB 网络摄像头(固定焦距)设置作为简单的 stereoscopic rangefinder ,间隔 N 毫米,每个朝中心线旋转 M 度,我已经 calibrated the cameras以确保对齐。

调整角度时,如何测量图像之间的重合度(最好在 Python/PIL/OpenCV 中)以了解相机何时聚焦在物体上?是否像在每个图像中选择一部分像素(A 行×B 列)并计算像素之间的差异之和一样简单?

最佳答案

问题是你不能假设相机的像素完美对齐

所以假设 x -axis 是视差移动轴,y - 轴已对齐。即使您尽可能地对齐,您也需要识别 x 轴图像失真/移位来检测视差对齐。不保证abs差异的结果在min/max中因此,不要减去单个像素,而是减去半径/大小大于 y-axis 中的对齐误差的该像素附近区域的平均颜色。 。让我们称这个半径或大小为 r这样,对齐时产生的差异应该最小。

近似搜索

您甚至可以通过 r 来加快该过程

  1. 选择大r
  2. 使用步骤扫描整个 x 范围,例如 0.25*r
  3. 选择差异最小的 x 位置 ( x0 )
  4. 更改r减半
  5. 转到第 2 点(但这次整个 x 范围正好在 <x0-2.0*r,x0+2.0r> 之间
  6. 如果 r 则停止小于几个像素

这样您就可以在 O(log2(n)) 中进行搜索而不是O(n)

计算机视觉方法

这应该更快:

  1. 检测兴趣点(在展位图像中)
    • 梯度的具体变化等...
  2. 交叉匹配图像之间的兴趣点
  3. 计算交叉匹配点之间的平均 x 距离
  4. 通过找到的点距离更改视差对齐
  5. 转到项目符号 1,直到 x 距离足够小

这样您就可以避免检查整个 x 范围,因为对齐距离是直接获得的...您只需将其转换为角度或用于对齐视差的任何内容

[注释]

您不需要在整个图像区域上执行此操作,只需沿着图像选择几条水平线并扫描其附近的区域即可。

还有另一种方法来检测对齐,例如对于短距离,倾斜是对齐的重要标志,因此比较相机之间物体左侧和右侧的高度...如果接近相同,如果更大/则对齐较小的你没有对齐并且知道转向哪个方向......

关于python - 如何在光学测距仪中测量图像重合度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32428612/

相关文章:

java - OpenCv 图像转换

python - 热重载 gevent WSGIServer

java - OpenCV Java createFisherFace Ptr

python - 在预定义的位置将一个列表中的值插入到另一个列表中

ios - OpenCV 错误 : Assertion failed on iOS

opencv - 在图像底部不是背景的一部分的情况下如何改进 Grabcut?

PHP 获取目录中图像的尺寸

c++ - 使用 OpenCV 检测绘制在背景图像上的矩形

python - 流量控制和失败 : Database access not allowed, 使用 "django_db".... 错误

python - X 请求失败的错误 : BadValue (integer parameter out of range for operation), PyOpenGL