Каков наилучший алгоритм масштабирования изображения (по качеству)?

Я хочу узнать, какой алгоритм является лучшим, который можно использовать для уменьшения растрового изображения. С лучшими я имею в виду тот, который дает самые красивые результаты. Я знаю о бикубике, но есть ли еще что-то еще? Например, я слышал от некоторых людей, что Adobe Lightroom имеет какой-то проприетарный алгоритм, который дает лучшие результаты, чем стандартный бикубик, который я использовал. К сожалению, я хотел бы использовать этот алгоритм самостоятельно в своем программном обеспечении, поэтому Adobe тщательно охраняемых торговых секретов не будет делать.

Добавлено:

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

Он также напомнил мне об алгоритме, который я "придумал" сам, но так и не был реализован. Полагаю, у него также есть имя (как-то эта тривиальная не может быть моей мыслью), но я не мог найти ее среди популярных. Суперсэмплинг был самым близким.

Идея заключается в том, что для каждого пикселя в целевом изображении вычислите, где он будет в исходном изображении. Вероятно, он наложит один или несколько других пикселей. Тогда можно было бы рассчитать площади и цвета этих пикселей. Затем, чтобы получить цвет целевого пикселя, можно просто вычислить среднее значение этих цветов, добавив их области как "веса". Итак, если целевой пиксель будет покрывать 1/3 желтого пикселя источника и 1/4 зеленого пикселя источника, я бы получил (1/3 * желтый + 1/4 * зеленый)/(1/3 + 1/4).

Это, естественно, будет интенсивно вычислить, но оно должно быть как можно ближе к идеалу, не?

Есть ли имя для этого алгоритма?

Ответ 1

К сожалению, я не могу найти ссылку на исходный опрос, но, поскольку голливудские кинематографисты перешли с фильма на цифровые изображения, этот вопрос возник очень много, поэтому кто-то (возможно, SMPTE, возможно, ASC) собрал кучу профессиональных кинематографистов и показал их кадры, которые были перемасштабированы, используя кучу разных алгоритмов. Результаты состояли в том, что для этих профессионалов, смотрящих на огромные кинофильмы, консенсус заключался в том, что Mitchell (также известный как высококачественный Catmull-Rom) лучше всего подходит для масштабирования и sinc является лучшим для уменьшения. Но sinc - это теоретический фильтр, который уходит в бесконечность и, следовательно, не может быть полностью реализован, поэтому я не знаю, что они на самом деле подразумевали под "sinc". Вероятно, это относится к усеченной версии sinc. Lanczos - один из нескольких практических вариантов sinc, который пытается улучшить только его усечение и, вероятно, лучший выбор по умолчанию для уменьшения неподвижных изображений. Но, как обычно, это зависит от изображения и того, что вы хотите: сокращение рисунка линии для сохранения линий - это, например, случай, когда вы можете предпочесть сохранение краев, которые были бы нежелательны при сжатии фотографии цветов.

Существует хороший пример результатов различных алгоритмов в Cambridge in Color.

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

Теперь ImageMagick имеет обширное руководство по фильтрам повторной выборки, если вы действительно хотите войти в него.

Как это ни парадоксально, есть больше споров о сокращении изображения, что теоретически может быть совершенным, поскольку вы только отбрасываете информацию, чем есть о расширении, когда вы пытаетесь добавить информацию что не существует. Но начните с Ланцоса.

Ответ 2

Существует выборка Lanczos, которая медленнее, чем бикубическая, но создает изображения более высокого качества.

Ответ 3

(Bi-) линейная и (би-) кубическая передискретизация не только уродливы, но и ужасно неправильны при уменьшении масштаба на коэффициент меньше 1/2. Они приведут к очень плохому сглаживанию, сходному с тем, что вы получили бы, если бы вас сбросили с коэффициентом в 1/2, а затем использовали сэмплинг сэмплирования ближайших соседей.

Лично я бы рекомендовал (area-) усреднение выборок для большинства задач понижающей дискретизации. Это очень просто и быстро и почти оптимально. Гауссовская передискретизация (с радиусом, выбранным пропорционально обратному коэффициенту, например радиусу 5 для понижающей дискретизации на 1/5), может дать лучшие результаты с меньшими вычислительными издержками и более математически звучит.

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

Ответ 4

Недавно я увидел статью о Slashdot о Seam Carving, возможно, стоит посмотреть.

Резка швов - это изменение размера изображения алгоритм, разработанный Шаем Авиданом и Ариэль Шамир. Этот алгоритм изменяет размеры изображения не масштабирования или обрезки, а разумное удаление пикселей из (или добавление пикселей в) изображение, которое несут мало важности.

Ответ 5

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

Ответ 6

Есть ли имя для этого алгоритма?

В литературе она может быть перепечатана как "коробка" или "окно". Как вы думаете, это на самом деле меньше вычислительных затрат.

Его также можно использовать для создания промежуточного растрового изображения, которое впоследствии используется би-кубической интерполяцией, чтобы избежать сглаживания при уменьшении дискретизации более чем на 1/2.