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

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

Что быстрее?

Какой алгоритм выполняется для изменения размеров изображения (особенно уменьшающий от большого 600x600 к супер, маленькому 6x6, например) такими гигантами как флэш-память и серебряный плеер и html5?

8
задан 6 revs 22 June 2010 в 10:39
поделиться

4 ответа

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

Проблема с наивной реализацией билинейной выборки заключается в том, что если вы используете ее для уменьшения изображения более чем наполовину, вы можете столкнуться с артефактами наложения спектров, аналогичными тем, с которыми вы столкнетесь с ближайшим соседом. Решение этой проблемы - использовать подход, основанный на пирамиде. В основном, если вы хотите уменьшить 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;
8
ответ дан 5 December 2019 в 12:55
поделиться

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

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

1
ответ дан 5 December 2019 в 12:55
поделиться

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

3
ответ дан 5 December 2019 в 12:55
поделиться

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

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

1
ответ дан 5 December 2019 в 12:55
поделиться