2010-06-24 27 views
19

La imagen de función proporcionada por Emgu (una envoltura .NET para OpenCV) el cambio de tamaño se puede utilizar any one of four interpolation methods:¿Cómo elijo un método de interpolación de imágenes? (Emgu/OpenCV)

  1. CV_INTER_NN (predeterminado)
  2. CV_INTER_LINEAR
  3. CV_INTER_CUBIC
  4. CV_INTER_AREA

Comprendo aproximadamente la interpolación lineal, pero solo puedo adivinar qué área cúbica o área. Sospecho que NN representa al vecino más cercano, pero podría estar equivocado.

La razón por la que estoy cambiando el tamaño de una imagen es para reducir la cantidad de píxeles (se repetirán en algún punto) sin dejar de ser representativos. Menciono esto porque me parece que la interpolación es fundamental para este propósito; por lo tanto, obtener el tipo correcto debería ser bastante importante.

Mi pregunta, entonces, ¿cuáles son los pros y contras de cada método de interpolación? ¿Cómo difieren y cuál debo usar?

Respuesta

19

El vecino más cercano será lo más rápido posible, pero perderá información sustancial al cambiar el tamaño.

La interpolación lineal es menos rápida, pero no dará como resultado la pérdida de información a menos que esté reduciendo la imagen (lo que usted es).

La interpolación cúbica (probablemente en realidad "Bicúbico") utiliza una de las muchas fórmulas posibles que incorporan píxeles adyacentes múltiples. Esto es mucho mejor para reducir las imágenes, pero todavía tiene limitaciones en cuanto a la reducción que puede hacer sin pérdida de información. Dependiendo del algoritmo, probablemente puedas reducir tus imágenes en un 50% o un 75%. La contra principal de este enfoque es que es mucho más lento.

No estoy seguro de qué es "área", en realidad puede ser "Bicúbica". Con toda probabilidad, esta configuración dará su mejor resultado (en términos de pérdida de información/apariencia), pero a costa del mayor tiempo de procesamiento.

Actualización: este enlace da más detalles (incluyendo un quinto tipo no incluido en la lista):

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

9

El método de interpolación de utilizar depende de lo que está tratando de lograr:

CV_INTER_LINEAR o CV_INTER_CUBIC aplicar un filtro de paso bajo (promedio) para lograr una compensación entre calidad visual y edge rem oval (los filtros de paso bajo tienden a eliminar los bordes para reducir el aliasing en las imágenes). Entre estos dos, te recomendaría CV_INTER_CUBIC.

El método CV_INTER_NN en realidad es el vecino más cercano, es el método más básico y obtendrá bordes más nítidos (no se aplicará filtro de paso bajo). Sin embargo, este método simplemente es como "ampliar" la imagen, sin mejora visual.

1

Todos pierden información, que usted utiliza depende de la velocidad que necesita, la cantidad de información que puede permitirse perder y la naturaleza de su imagen.

En este momento no hay una respuesta correcta - es por eso que hay una elección

4

Los algoritmos son: (descripciones son de la documentación OpenCV)

  • INTER_NEAREST - una interpolación del vecino más próximo
  • INTER_LINEAR - una interpolación bilineal (utilizada por defecto)
  • INTER_AREA - remuestreo utilizando la relación de área de píxel. Puede ser un método preferido para la destrucción de imágenes, ya que da resultados libres de moiré. Pero cuando se amplía la imagen, es similar al método INTER_NEAREST.
  • INTER_CUBIC - una interpolación bicúbica más de 4x4 píxeles barrio
  • INTER_LANCZOS4 - una interpolación Lanczos más de 8x8 píxeles barrio

Si quieres más velocidad utilización método del vecino más próximo.

Si desea conservar la calidad de la imagen después de la disminución de la resolución, puede considerar el uso de interpolación basada en INTER_AREA, pero nuevamente depende del contenido de la imagen.

Usted puede encontrar un análisis detallado de la comparación de velocidad here

A continuación se muestra la comparación velocidad de la imagen px 400 * 400 en la tomada desde el enlace anterior

Speed comparison

+0

Gran respuesta, 1. Lamentablemente, no estoy seguro de que obtendrás mucho más, ya que la pregunta tiene 7 años. –

+0

Fuente original: http://tanbakuchi.com/posts/comparison-of-openv-interpolation-algorithms/ – dgorissen