Какие алгоритмы использовать для уменьшения размера изображения? - PullRequest
7 голосов
/ 21 июня 2010

Какие алгоритмы использовать для уменьшения размера изображения?

Что быстрее?

Какой алгоритм применяется для изменения размера изображения (особенно для уменьшения размера с большого 600x600 до сверхмалого 6x6, например) такими гигантами, как flash и silver player, и html5?

Ответы [ 4 ]

8 голосов
/ 22 июня 2010

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

Проблема с наивной реализацией билинейногоВыборка заключается в том, что если вы используете его, чтобы уменьшить изображение более чем наполовину, то вы можете столкнуться с артефактами сглаживания, подобными тем, с которыми вы столкнетесь с ближайшим соседом.Решение этой проблемы заключается в использовании подхода на основе пирамиды.В основном, если вы хотите уменьшить 600x600 до 30x30, сначала уменьшите до 300x300, затем до 150x150, затем до 75x75, затем до 38x38, и только затем используйте билинейный режим, чтобы уменьшить до 30x30.Алгоритм выборки становится намного проще.В основном для каждой чередующейся строки и столбца пикселей:

y[i/2][j/2] = (x[i][j] + x[i+1][j] + x[i][j+1] + x[i+1][j+1]) / 4;
3 голосов
/ 22 июня 2010

Существует один особый случай: уменьшение JPG более чем в 8 раз. Для необработанных данных JPG можно выполнить прямой масштаб 8, не распаковывая его. JPG хранятся в виде сжатых блоков размером 8x8 пикселей, в первую очередь со средним значением пикселя. В результате для чтения файла с диска или из сети обычно требуется больше времени, чем для его уменьшения.

1 голос
/ 22 июня 2010

В The Code Project есть отличная статья , демонстрирующая эффекты различных фильтров изображений.

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

1 голос
/ 22 июня 2010

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

Здесь - хороший ресурс, который достаточно хорошо объясняет концепции.

...