如何选择图像插值方法? (Emgu / OpenCV的)

时间:2010-06-24 17:28:24

标签: image opencv interpolation emgucv

Emgu(OpenCV的.net包装器)提供的图像大小调整功能可以使用any one of four interpolation methods

  1. CV_INTER_NN(默认)
  2. CV_INTER_LINEAR
  3. CV_INTER_CUBIC
  4. CV_INTER_AREA
  5. 我粗略地理解线性插值,但只能猜测立方体或区域的作用。我怀疑NN代表最近的邻居,但我可能是错的。

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

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

4 个答案:

答案 0 :(得分:21)

最近邻居将尽可能快,但在调整大小时你将失去大量信息。

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

立方插值(可能实际上是“Bicubic”)使用包含多个相邻像素的许多可能公式之一。这对于缩小图像要好得多,但是如果没有信息丢失,你仍然可以做多少缩减。根据算法,您可以将图像缩小50%或75%。这种方法的主要原因是速度要慢得多。

不确定“区域”是什么 - 它实际上可能是“Bicubic”。很可能,此设置将提供最佳结果(在信息丢失/外观方面),但代价是最长的处理时间。

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

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

答案 1 :(得分:10)

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

CV_INTER_LINEAR CV_INTER_CUBIC 应用低通滤波器(平均值)以实现视觉质量和边缘消除之间的折衷(低通滤波器倾向于按顺序删除边缘减少图像中的混叠)。在这两者之间,我建议你 CV_INTER_CUBIC

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

答案 2 :(得分:6)

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

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

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

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

您可以找到速度比较的详细分析here

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

Speed comparison

答案 3 :(得分:1)

他们都会丢失信息,您使用的信息取决于您需要的速度,丢失的信息量以及图像的性质。

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