Каков наилучший алгоритм масштабирования изображения (по качеству)?
Я хочу выяснить, какой алгоритм является лучшим, который может быть использован для сокращения растровые изображения. С лучшим я имею в виду тот, который дает самые красивые результаты. Я знаю бикубический, но есть что-то еще лучше? Например, я слышал от некоторых людей, что Adobe Lightroom имеет какой-то собственный алгоритм, который дает лучшие результаты, чем стандартный бикубическая, что я использовал. К сожалению, я хотел бы использовать этот алгоритм сам в своем программном обеспечении, поэтому Adobe тщательно охраняется коммерческая тайна не годится.
добавлено:
Я проверил Paint.NET и к моему удивлению кажется, что супер выборка лучше, чем бикубическая при уменьшении изображения. Это заставляет меня задаться вопросом,являются ли алгоритмы интерполяции вообще способом.
Это также напомнило мне об алгоритме, который я сам "изобрел", но никогда не реализовывал. Я полагаю, что у него также есть имя (поскольку что-то такое тривиальное не может быть идеей меня одного), но я не мог найти его среди самые популярные. Супер выборка была самой близкой.
идея такова-для каждого пикселя в целевом изображении вычислите, где он будет в исходном изображении. Вероятно, он наложит один или несколько других пикселей. Затем можно было бы рассчитать площади и цвета этих пикселей. Затем, чтобы получить цвет целевого пикселя, нужно просто вычислить среднее значение этих цветов, добавив их области в качестве "весов". Итак, если целевой пиксель будет покрывать 1/3 желтого источника пиксель и 1/4 зеленого исходного пикселя, я бы получил (1/3 * желтый + 1/4 * зеленый) / (1/3+1/4).
Это, естественно, было бы вычислительно интенсивным, но оно должно быть как можно ближе к идеалу, нет?
есть ли название для этого алгоритма?
6 ответов:
к сожалению, я не могу найти ссылку на оригинальный опрос, но поскольку голливудские кинематографисты перешли от фильма к цифровым изображениям, этот вопрос возник много, поэтому кто-то (возможно, SMPTE, возможно, ASC) собрал кучу профессиональных кинематографистов и показал им кадры, которые были масштабированы с использованием множества различных алгоритмов. Результаты были таковы, что для этих профессионалов, смотрящих на огромные кинофильмы, консенсус заключался в том, что Митчелл (также известный как высокое качество Catmull-Rom) является лучшим для масштабирования и sinc является лучшим для уменьшения масштаба. Но sinc-это теоретический фильтр, который уходит в бесконечность и, следовательно, не может быть полностью реализован, поэтому я не знаю, что они на самом деле имели в виду под "sinc". Вероятно, это относится к усеченной версии sinc. Lanczos является одним из нескольких практических вариантов sinc, который пытается улучшить его усечение и, вероятно, является лучшим выбором по умолчанию для масштабирования неподвижных изображений. Но как обычно это зависит от изображения и того, что вы хотите: сжатие линейного рисунка для сохранения линий-это, например, случай, когда вы можете предпочесть акцент на сохранении краев, которые были бы нежелательны при сжатии фотографии цветов.
есть хороший пример результатов различных алгоритмов в Кембридж в цвете.
люди fxguide собрал много информации на алгоритмах масштабирования (наряду с большим количеством других вещей о композитинге и другой обработке изображений), на которые стоит взглянуть. Они также включают тестовые изображения, которые могут быть полезны в собственных тестах.
теперь ImageMagick имеет обширное руководство по передискретизации фильтров если вы действительно хотите попасть в него.
Это своего рода ирония, что есть больше споров о масштабировании изображения, что теоретически то, что можно сделать идеально, так как вы только выбрасываете информация, чем есть о масштабировании, где вы пытаетесь добавить информацию, которая не существует. Но начнем с Ланцоша.
здесь отбора проб Ланцоша который медленнее, чем бикубический, но производит более высокое качество изображения.
(Би-)линейная и (Би-)кубическая передискретизация не просто уродливы, но ужасно неверны при уменьшении масштаба в разы меньше 1/2. Они приведут к очень плохому сглаживанию, похожему на то, что вы получите, если вы уменьшите масштаб в 1/2, а затем используете downsampling ближайшего соседа.
лично я бы рекомендовал (area-)усреднение выборок для большинства задач downsampling. Это очень просто и быстро и почти оптимально. Гауссова передискретизация (с радиусом, выбранным пропорционально обратной фактор, например радиус 5 для понижающей дискретизации на 1/5) может дать лучшие результаты с немного более вычислительными накладными расходами, и это более математически обосновано.
одна из возможных причин использования гауссовой пересчета заключается в том, что, в отличие от большинства других алгоритмов, он работает правильно (не вводит артефакты/сглаживание) как для восходящей, так и для нисходящей дискретизации, если вы выбираете радиус, соответствующий коэффициенту пересчета. В противном случае для поддержки обоих направлений вам понадобятся два отдельных алгоритма-area усреднение для нисходящей выборки (которая деградирует до ближайшего соседа для апсэмплинга) и что-то вроде (bi-)кубического для апсэмплинга (который деградирует до ближайшего соседа для нисходящей выборки). Один из способов увидеть это хорошее свойство гауссовой пересчета математически заключается в том, что Гаусс с очень большим радиусом аппроксимирует усреднение по площади, а Гаусс с очень малым радиусом аппроксимирует (Би -) линейную интерполяцию.
Я видел статью на Slashdot о Резьба По Шву некоторое время назад, это может быть стоит посмотреть.
резьба по швам-это изменение размера изображения алгоритм, разработанный Шай Авидан и Ариэль Шамир. Этот алгоритм изменяет размеры изображения не масштабирования или кадрирования, а интеллектуальное удаление пикселей из (или добавление пикселей к) изображению, которое несет менее важный.
алгоритм, который вы описываете, называется линейной интерполяцией и является одним из самых быстрых алгоритмов, но не лучшим на изображениях.
есть ли имя для этого алгоритма?
это может быть названо "коробкой" или "окном" пересчета в литературе. Это на самом деле менее вычислительно дорого, как вы думаете.
Он также может быть использован, чтобы создать растровое изображение, которое впоследствии используется Би-кубической интерполяции, чтобы избежать наложения спектров, когда уменьшено более чем на 1/2.
Comments