Как выбрать метод интерполяции изображения? (Emgu / OpenCV)
23690 просмотра
5 ответа
Функция изменения размера изображения, предоставляемая Emgu (оболочка .net для OpenCV), может использовать любой из четырех методов интерполяции :
- CV_INTER_NN (по умолчанию)
- CV_INTER_LINEAR
- CV_INTER_CUBIC
- CV_INTER_AREA
Я приблизительно понимаю линейную интерполяцию, но могу только догадываться, что делают куб или область. Я подозреваю, что NN обозначает ближайшего соседа, но я могу ошибаться.
Причина, по которой я изменяю размер изображения, заключается в уменьшении количества пикселей (они будут повторяться в какой-то момент), сохраняя при этом их репрезентативность. Я упоминаю об этом, потому что мне кажется, что интерполяция является центральной для этой цели - поэтому выбор правильного типа должен быть очень важным.
Тогда мой вопрос: каковы плюсы и минусы каждого метода интерполяции? Чем они отличаются и какую мне использовать?
Автор: Tom Wright Источник Размещён: 24.07.2019 03:23Ответы (5)
21 плюса
Ближайший сосед будет максимально быстро, но при изменении размера вы потеряете существенную информацию.
Линейная интерполяция менее быстра, но не приведет к потере информации, если вы не уменьшите изображение (которым вы являетесь).
Кубическая интерполяция (вероятно, фактически «бикубическая») использует одну из многих возможных формул, которые включают несколько соседних пикселей. Это намного лучше для сжатия изображений, но вы по-прежнему ограничены в том, сколько вы можете уменьшить без потери информации. В зависимости от алгоритма, вы можете уменьшить свои изображения на 50% или 75%. Основным недостатком этого подхода является то, что он намного медленнее.
Не уверен, что такое «область» - это может быть «бикубик». По всей вероятности, этот параметр даст ваш лучший результат (с точки зрения потери / появления информации), но за счет самого длительного времени обработки.
Обновление: эта ссылка дает более подробную информацию (включая пятый тип, не включенный в ваш список):
http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html?highlight=resize#resize
Автор: MusiGenesis Размещён: 24.06.2010 05:3810 плюса
Используемый метод интерполяции зависит от того, чего вы пытаетесь достичь:
CV_INTER_LINEAR или CV_INTER_CUBIC применяют фильтр нижних частот (средний) для достижения компромисса между визуальным качеством и удалением краев (фильтры нижних частот, как правило, удаляют края для уменьшения наложения изображений). Между этими двумя я бы порекомендовал вам CV_INTER_CUBIC .
Метод CV_INTER_NN на самом деле является ближайшим соседом, это самый простой метод, и вы получите более острые края (фильтр нижних частот применяться не будет). Однако этот метод просто похож на «масштабирование» изображения, без визуального улучшения.
Автор: Federico Cristina Размещён: 24.06.2010 05:406 плюса
Алгоритмы: (описания взяты из документации OpenCV)
- INTER_NEAREST - интерполяция ближайшего соседа
- INTER_LINEAR - билинейная интерполяция (используется по умолчанию)
- INTER_AREA - повторная выборка с использованием отношения площади пикселя. Это может быть предпочтительный метод для прореживания изображений, поскольку он дает результаты без муаров. Но когда изображение увеличено, оно похоже на метод INTER_NEAREST.
- INTER_CUBIC - бикубическая интерполяция в окрестности 4x4 пикселей
- INTER_LANCZOS4 - интерполяция Ланцоша в окрестности 8x8 пикселей
Если вы хотите больше скорости, используйте метод Nearest Neighbor.
Если вы хотите сохранить качество изображения после понижающей дискретизации, вы можете использовать интерполяцию на основе INTER_AREA, но, опять же, это зависит от содержимого изображения.
Вы можете найти подробный анализ скорости сравнения здесь
Ниже приведено сравнение скорости на изображении 400 * 400 пикселей, полученном по вышеуказанной ссылке.
Автор: nbsrujan Размещён: 31.05.2017 07:241 плюс
Все они теряют информацию, которую вы используете, зависит от скорости, которую вам нужно, сколько информации вы можете позволить себе потерять и характер вашего изображения.
Извините, что нет правильного ответа - поэтому есть выбор
Автор: Martin Beckett Размещён: 24.06.2010 05:420 плюса
Существует метод «мультимасштабной полулокальной интерполяции с сглаживанием», который может одновременно интерполировать лучшее качество изображения и уменьшать артефакты сглаживания изображений (на основе его статьи, опубликованной в «IEEE Transactions on Image processing, 2012»). Код этого метода находится по адресу https://github.com/KaiGuo-Vision/MultiscaleInterpolation
Автор: Mike Размещён: 24.07.2019 12:21Вопросы из категории :
- image Хранение изображений в БД - да или нет?
- image Эффективное изменение размера JPEG изображения в PHP
- image Алгоритм сравнения двух изображений
- image Изображения в PHP
- image Как я могу измерить сходство между двумя изображениями?
- opencv Как решить QPixmap :: fromImage утечка памяти?
- opencv Доступ к матричному элементу в объекте «Мат» (а не в объекте CvMat) в OpenCV C ++
- opencv Самый простой способ повернуть на 90 градусов изображение с помощью OpenCV?
- opencv Как проверить openCV на Ubuntu 9.10
- opencv Как выбрать метод интерполяции изображения? (Emgu / OpenCV)
- interpolation В Ruby, вы можете выполнить интерполяцию строк для данных, прочитанных из файла?
- interpolation Интерполяция вращения
- interpolation 3D-геометрия: как интерполировать матрицу
- interpolation Линейная интерполяция с плавающей точкой
- emgucv Controlling mouse pointer through camshift algorithm of OpenCV (or how mouse basically functions)
- emgucv EmguCV 2.3.0 в C # QueryFrame возвращает предыдущий запрашиваемый кадр
- emgucv Что означают элементы в матрице гомографии?
- emgucv Путь к файлу в проекте Azure