Подтвердить что ты не робот

Как выбрать метод интерполяции изображений? (Emgu/OpenCV)

Функция изменения размера изображения, предоставленная Emgu (оболочка .net для OpenCV), может использовать любой из четырех методов интерполяции:

  • CV_INTER_NN (по умолчанию)
  • CV_INTER_LINEAR
  • CV_INTER_CUBIC
  • CV_INTER_AREA

Я грубо понимаю линейную интерполяцию, но могу только догадываться, что такое кубика или область. Я подозреваю, что NN выступает за ближайшего соседа, но я могу ошибаться.

Причина, по которой я изменяю размер изображения, заключается в уменьшении количества пикселей (они будут повторяться в какой-то момент), сохраняя их репрезентативными. Я упоминаю это, потому что мне кажется, что интерполяция является центральной для этой цели - поэтому правильный тип должен быть очень важным.

Мой вопрос, каковы преимущества и недостатки каждого метода интерполяции? Как они отличаются и какой из них я должен использовать?

4b9b3361

Ответ 1

Ближайший сосед будет максимально быстро, но при изменении размера вы потеряете существенную информацию.

Линейная интерполяция менее быстра, но не приведет к потере информации, если вы не уменьшите изображение (которым вы являетесь).

Кубическая интерполяция (вероятно, фактически "бикубическая") использует одну из многих возможных формул, которые включают несколько соседних пикселей. Это намного лучше для сжатия изображений, но вы по-прежнему ограничены в том, сколько вы можете уменьшить без потери информации. В зависимости от алгоритма, вы можете уменьшить свои изображения на 50% или 75%. Основным недостатком этого подхода является то, что он намного медленнее.

Не уверен, что такое "область" - это может быть "бикубик". По всей вероятности, этот параметр даст ваш лучший результат (с точки зрения потери/появления информации), но за счет самого длительного времени обработки.

Обновление: эта ссылка дает более подробную информацию (включая пятый тип, не включенный в ваш список):

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

Ответ 2

Используемый метод интерполяции зависит от того, чего вы пытаетесь достичь:

CV_INTER_LINEAR или CV_INTER_CUBIC применяет фильтр нижних частот (средний) для достижения компромисса между визуальным качеством и удалением края (фильтры нижних частот имеют тенденцию удалять края по порядку для уменьшения наложения изображений). Между этими двумя, я бы рекомендовал вам CV_INTER_CUBIC.

Метод CV_INTER_NN на самом деле является ближайшим соседом, это самый базовый метод, и вы получите более резкие края (ни один фильтр нижних частот не будет применяться). Однако этот метод просто напоминает "масштабирование" изображения, отсутствие визуального улучшения.

Ответ 3

Алгоритмы: (описания из документации OpenCV)

  • INTER_NEAREST - интерполяция ближайшего соседа
  • INTER_LINEAR - билинейная интерполяция (используется по умолчанию)
  • INTER_AREA - повторная выборка с использованием отношения области пикселей. Это может быть предпочтительный метод для прореживания изображения, поскольку он дает результаты без муара. Но когда изображение масштабируется, оно похоже на метод INTER_NEAREST.
  • INTER_CUBIC - бикубическая интерполяция по окрестности 4x4 пикселей.
  • INTER_LANCZOS4 - интерполяция Lanczos в окрестности 8x8 пикселей

Если вы хотите увеличить скорость, используйте метод Nearest Neighbor.

Если вы хотите сохранить качество изображения после понижающей дискретизации, вы можете использовать интерполяцию на основе INTER_AREA, но опять же это зависит от содержимого изображения.

Вы можете найти подробный анализ сравнения скорости здесь

Ниже приведено сравнение скорости на изображении 400 * 400 px, взятом из приведенной выше ссылки.

Сравнение скорости

Ответ 4

Все они теряют информацию, которую вы используете, зависит от необходимой вам скорости, количества информации, которую вы можете позволить себе потерять, и характера вашего изображения.

Извините, нет правильного ответа - почему есть выбор

Ответ 5

Существует метод "мультимасштабной полулокальной интерполяции с сглаживанием", который может одновременно интерполировать лучшее качество изображения и уменьшать артефакты сглаживания изображения (на основе его статьи, опубликованной в "IEEE Transactions on Image processing, 2012"). Код этого метода находится по адресу https://github.com/KaiGuo-Vision/MultiscaleInterpolation