桶形失真 - 在预期/接收的控制点已知时校正图像

时间:2014-07-02 09:42:09

标签: c# image-processing computer-vision camera-calibration distortion

我正在使用安装的工业CCD相机,我没有关于其参数的信息。当通过WinUSB以编程方式拍摄图像时,接收到图1中的结果。你会注意到,线条之间的间隙在图像中差别很大。在实际图像中并非如此。

我有一种确定线条位置的技术,并且有一个像素坐标列表,用于在非扭曲图像中线条必须出现的位置。

所以我有

  • 拍摄图像时线条的像素坐标
  • 线条所在的像素坐标

我需要做什么

  • 使用这些值应用于相机拍摄的每张后续图像,以便这样做 每张图片都已更正。

然而,我非常依赖于遵循这种方法的现有技术。我知道互联网上存在许多利用镜头参数或强度参数的算法,但这些技术在我的场景中并不适合。参数不为人所知,用眼睛调整强度值是不够准确的。

关于技术的任何指示都会有很大的帮助;因为我目前处于亏损状态。


enter image description here

图1.固定位置CCD摄像机拍摄的失真图像


1 个答案:

答案 0 :(得分:3)

嗯,你能解释为什么标准校准技术不合适吗?你不需要知道" true"相机参数,但你需要估计失真的线性(实际上,仿射)部分,这几乎是一样的。

说明:假设你正在处理一个普通的球形透镜,我试用的第一个模型是一个双参数径向变形的形式:

X = f * |x - c|
Y = k1 * X^2 + k2 * X^4
y = c + Y / f

,其中

  • x =(u,v)是失真的像素坐标;
  • c =(cu,cv)是一个未知的失真中心(即图像中零点的位置) 失真,通常在镜头的焦轴上(或非常接近)。
  • | x -c |是扭曲图像中x与c的径向距离
  • f是未知比例因子
  • X是以缩放为中心的坐标中的失真像素的位置
  • k1和k2是未知的失真系数
  • Y是以缩放为中心的坐标
  • 中的未失真像素
  • y是未失真的像素,位于与x相同的半径c-> x上,距离c的距离为Y / F.

所以你的未知数是cu,cv,f,k1和k2。它开始看起来像是相机校准问题,不是吗?

除非你真的不需要估计一个真实的"焦距f,因为(我假设)你对3D空间中的光线计算不感兴趣。因此,您可以通过将f指定为使数据点分布的直径等于2的值来简化问题,以便所有居中缩放的点X的绝对值的坐标不大于1.0。这有两个方面:它改善了问题的数值条件,并将未知数减少到4。

您通常可以通过将图像的中心用于c来初始化估算,并将k1和k2的值设置为零,将数据插入您喜欢的最小二乘优化器,运行,获取未知数的解,并验证它是有道理的(在额外的独立图像上)。冲洗并重复,直至获得满意的效果。

请注意,您可以使用多个图像来丰富用于估算的数据集,当然,假设镜头参数是恒定的。