在Matlab的计算机视觉系统工具箱中,Correct lens distortion使用了三种类型的插值方法。
输入图像上使用的函数的插值方法。 interp输入插值方法可以是字符串,“最近”,“线性”或“立方”。
我的问题是:'最近','线性'或'立方'之间有什么区别?哪一个用“张”和“Heikkila,J和O. Silven”方法实现。
答案 0 :(得分:1)
我无法通过您在问题中写的链接访问分页(它要求输入用户名和密码),因此我假设您的链接页面具有与http://www.mathworks.it/it/help/vision/ref/undistortimage.html页面相同的内容引用这里:
J = undistortImage(I,cameraParameters,interp)
从输入图像I
中删除镜头失真并指定 用于输入图像的函数的插值方法。输入参数
I
- 输入图片
cameraParameters
- 用于存储摄像机参数的对象
interp
- 插值方法
'linear'
(默认)|'nearest'
|'cubic'
要使用的函数的插值方法 输入图像。 interp输入插值方法可以是 字符串,
'nearest'
,'linear'
或'cubic'
。
此外,我假设你指的是这些论文:
张正友。一种灵活的摄像机校准新技术。 模式分析与机器智能,IEEE Transactions on ,2000,22.11:1330-1334。
HEIKKILA,Janne; SILVEN,Olli。具有隐式图像校正的四步相机校准程序。 In: Computer Vision and Pattern Recognition,1997。Proceedings。,1997 IEEE Computer Society Conference on 。 IEEE,1997。p。 1106年至1112年。
我搜索了单词" interpolation"在两个pdf文档Zhang和Heikkila and Silven中,我没有找到关于他们使用的插值方法的任何直接陈述。
据我所知,一般来说,摄像机校准方法涉及如何估计内在,外在和镜头失真参数(所有这些参数都在Matlab的输入参数cameraParameters
undistortImage
dst(x,y) = src(f_x(x,y), f_y(x,y))
内。 1}}功能);插值方法是另一个问题的一部分,即几何图像变换的问题"。
我引用了OpenCV's page Geometric Image Transformation(我略微修改了原文,省略了一些细节并添加了一些定义,我假设您正在使用灰度图像):
本节中的功能执行各种几何 二维图像的变换。它们不会改变图像内容 变形像素网格并将此变形网格映射到目标 图片。实际上,为了避免采样伪像,映射完成 从目的地到源的相反顺序。也就是说,每个人 目标图像的像素(x,y),函数计算 源图像中相应“施主”像素的坐标和 复制像素值:
dst(x,y)
,其中
x
是位于目标图片中行y
和列src(x,y)
的像素的灰度值
x
是位于源图像中的行y
和列f_x
的像素的灰度值
x
是一个将行y
和列f_y
映射到新行的函数,它只使用坐标而不是灰度级。
x
是一个将行y
和列(x,y)
映射到新列的函数,它只使用坐标而不是灰度级。几何变换的实际实现,来自 最通用的remap()和最简单,最快的调整大小() ,需要用上面的公式解决两个主要问题:
•外推不存在的像素。与过滤类似 对于某些
f_x(x,y)
,上一节中描述的函数也是如此f_y(x,y)
或f_x(x,y)
中的一个,或两者都可能不在其中 图片。在这种情况下,需要使用外推法。 OpenCV提供了相同的外推方法选择 过滤功能。另外,它提供了该方法 BORDER_TRANSPARENT。这意味着相应的像素 目标图像根本不会被修改。•像素插值 值。通常
f_y(x,y)
和<f_x, f_y>
是浮点数。这个 意味着(f_x(x,y), f_y(x,y))
可以是仿射或 透视变换,或径向透镜畸变校正,和 等等。因此,需要在小数坐标处的像素值 检索。在最简单的情况下,坐标可以是圆形的 到最近的整数坐标和相应的像素即可 用过的。这称为最近邻插值。但是,一个 使用更复杂的方法可以获得更好的结果 插值方法,其中多项式函数适合某些 计算像素(f_x(x,y), f_y(x,y))
的邻域,然后是'nearest'
处的多项式的值被视为。{1} 内插像素值。在OpenCV中,您可以选择几种 插值方法。有关详细信息,请参阅resize()。
对于&#34; soft&#34;引言也参见例如Cambridge in colour - DIGITAL IMAGE INTERPOLATION。
所以,让我们说你需要x = 20.2 y = 14.7的像素灰度级,因为x和y是一个小数部分与零不同的数字,你需要发明&#34; (以某种方式计算)灰度级。在最简单的情况下('linear'
插值),您只需说(20.2,14.7)处的灰度级是您在(20,15)处检索的灰度级,它被称为&#34;最接近&#34;因为20是最接近20.2的整数值,15是最接近14.7的整数值。
在(bi)'cubic'
插值中,您将使用(20,14),(20,15)处的四个像素的灰度级组合计算(20.2,14.7)处的值( 21,14),(21,15);有关如何计算组合的详细信息,请参阅具有Wikipedia page的a numeric example。
(bi){{1}}插值考虑16个像素的组合以计算(20.2,14.7)处的值,请参阅Wikipedia page。
我建议您使用相同的输入图像尝试所有这三种方法,并查看输出图像的差异。
答案 1 :(得分:0)
插值方法实际上与相机校准无关。每次对图像应用几何变换(例如旋转,重新调整大小或失真补偿)时,新图像中的像素将对应于旧图像的像素之间的点。所以你必须以某种方式插入他们的价值观。
'nearest'表示您只需使用最近像素的值 'linear'表示您使用双线性插值。新像素的值是输入图像中相邻像素的值的加权和,其中权重与距离成比例。 'cubic'表示你使用双三次插值,这比双线性更复杂,但可能会给你一个更平滑的图像。
interp2函数的文档中给出了对这些插值方法的详细描述。
最后,为了澄清,undistortImage
功能在计算机视觉系统工具箱中。