27

Emgu(OpenCV 的 .net 包装器)提供的图像大小调整功能可以使用四种插值方法中的任何一种

  1. CV_INTER_NN(默认)
  2. CV_INTER_LINEAR
  3. CV_INTER_CUBIC
  4. CV_INTER_AREA

我大致了解线性插值,但只能猜测三次或面积的作用。我怀疑 NN 代表最近的邻居,但我可能是错的。

我调整图像大小的原因是减少像素数量(它们将在某些时候被迭代),同时保持它们的代表性。我提到这一点是因为在我看来插值是这个目的的核心——因此获得正确的类型应该非常重要。

那么我的问题是,每种插值方法的优缺点是什么?它们有什么不同,我应该使用哪一个?

4

4 回答 4

29

最近的邻居将尽可能快,但在调整大小时您会丢失大量信息。

线性插值速度较慢,但​​不会导致信息丢失,除非您正在缩小图像(您就是这样)。

三次插值(可能实际上是“双三次”)使用包含多个相邻像素的许多可能公式之一。这对于缩小图像要好得多,但是在不丢失信息的情况下,您可以做多少缩小仍然受到限制。根据算法,您可能可以将图像减少 50% 或 75%。这种方法的主要缺点是速度要慢得多。

不确定“面积”是什么——它实际上可能是“双三次”。很有可能,这个设置会给你最好的结果(在信息丢失/外观方面),但代价是最长的处理时间。

更新: 此链接提供了更多详细信息(包括列表中未包含的第五种类型):

http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html?highlight=resize#resize

于 2010-06-24T17:38:48.787 回答
13

算法是:(描述来自 OpenCV 文档)

  • INTER_NEAREST - 最近邻插值
  • INTER_LINEAR - 双线性插值(默认使用)
  • INTER_AREA - 使用像素区域关系重采样。它可能是图像抽取的首选方法,因为它可以提供无莫尔条纹的结果。但是当图像被缩放时,它类似于 INTER_NEAREST 方法。
  • INTER_CUBIC - 4x4 像素邻域的双三次插值
  • INTER_LANCZOS4 - 8x8 像素邻域的 Lanczos 插值

如果您想要更快的速度,请使用最近邻法。

如果您想在下采样后保持图像质量,可以考虑使用基于 INTER_AREA 的插值,但这又取决于图像内容。

你可以在这里找到速度比较的详细分析

以下是从上述链接获取的 400*400 像素图像的速度比较

速度比较

于 2017-05-31T07:24:06.107 回答
10

要使用的插值方法取决于您要实现的目标:

CV_INTER_LINEARCV_INTER_CUBIC应用低通滤波器(平均)以实现视觉质量和边缘去除之间的权衡(低通滤波器倾向于去除边缘以减少图像中的混叠)。在这两者之间,我推荐你CV_INTER_CUBIC

CV_INTER_NN方法实际上是最近邻法,它是最基本的方法,你会得到更清晰的边缘(不会应用低通滤波器)。然而,这种方法简直就像“缩放”图像,没有视觉增强。

于 2010-06-24T17:40:46.377 回答
1

它们都会丢失信息,您使用的信息取决于您需要的速度、您可以承受的丢失多少信息以及图像的性质。

抱歉,没有正确答案 - 这就是为什么有选择

于 2010-06-24T17:42:24.323 回答