ImageMagick обрезает только с одной стороны, как я могу обрезать с обеих?

Вопрос или проблема

Я пытаюсь использовать ImageMagick(7.1.1-43) для автоматической обрезки фотографии монеты, удаляя окружающий фон. Я хочу подрезать изображение на основе фактора “размытия”, эффективно удаляя почти равномерный цвет. Однако моя текущая команда обрезает только левую сторону изображения, оставляя правую сторону нетронутой.

Моя цель:

Я хочу обрезать обе стороны изображения одинаково, удаляя как можно больше стены, сохраняя монету.

Используемая команда:

./magick 20240614_093525.JPG -fuzz 51% -trim +repage img1.jpg

Оригинальное изображение:

enter image description here

Возвращенное изображение:

enter image description here

Что я пробовал:

Я пробовал изменять процент -fuzz, но это, похоже, не влияет на обрезку с правой стороны. Снижая его слишком сильно, обрезка не происходит, а при увеличении возникает ошибка:

magick: geometry does not contain image `20240614_093525.JPG’ @ warning/attribute.c/GetImageBoundingBox/554.

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

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

Вы можете также поэкспериментировать с параметром -define trim:percent-background, который влияет на внутренний процент сходства фона trim, а не на общее цветовое сходство. Например, это:

magick in.webp -fuzz 48% -define trim:percent-background=99.5% -trim +repage out.webp

дало наилучшую точность из моих быстрых тестов, начиная с 50% нечеткости и по умолчанию 100%:

Almost correct coin

Но даже намного лучшие результаты можно получить, если сначала обработать виньетку. Например, просто используя -shave 50x50, чтобы вырезать углы, а затем обработать полученное изображение, можно достичь гораздо лучших результатов с меньшей глобальной нечеткостью, например:

magick out.webp -fuzz 45% -define trim:percent-background=98.5% -trim +repage out.webp

Even more accurate coin

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

Вы можете сделать это в Imagemagick 7 с помощью одной из определений -trim. Смотрите https://imagemagick.org/script/command-line-options.php#trim или https://imagemagick.org/script/defines.php

magick image.webp -background "gray(200)" -define trim:percent-background=100% -fuzz 49% -trim +repage img1.jpg

enter image description here

Ответ или решение

Использование ImageMagick для автоматического обрезания изображений — это мощный инструмент, однако иногда его базовые команды могут не справляться с задачей оптимально, особенно, когда изображение имеет такие сложные условия, как неоднородность фона или наличие виньеток. В данной ситуации задача стоит в том, чтобы аккуратно и точно обрезать фотографию монеты, удалив фон и сохранив детали монеты. Проблема, с которой сталкивается пользователь, заключается в том, что текущая команда обрезает только левую сторону изображения, оставляя правую нетронутой.

Теория:

-trim — это одна из команд в ImageMagick, которая используется для автоматического обрезания изображений. Она удаляет полностью одноцветные края изображения, основываясь на верхнем левом пикселе в качестве эталона. К сожалению, если у вас есть виньетка, как в данном случае, или различие в интенсивности теней, -trim может работать некорректно, обрезая лишь одну сторону изображения.

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

Чтобы улучшить работу команды обрезания, мы можем добавить параметр -define trim:percent-background. Этот параметр позволяет определять процент фона, который система может учитывать как одноцветный, что существенно улучшает алгоритм корректного удаления фона.

Пример:

Вот пример команды, которая может привести к более желаемому результату:

magick 20240614_093525.JPG -fuzz 48% -define trim:percent-background=99.5% -trim +repage img1.jpg

Эта команда настраивает не только глобальную цветовую сочетаемость с помощью -fuzz, но и изменение trim:percent-background помогает системе лучше охватить однородные участки, определяя их как фон. Тем не менее, в случае по-настоящему сложных изображений с резкими виньетками, возможно, потребуется предпринять дополнительные шаги по их предобработке.

Дополнительные усилия могут заключаться в механическом удалении виньеток перед обрезкой основной части изображения. Это можно сделать с помощью команды -shave, которая уменьшает изображение путем удаления пикселей по краям. Например:

magick 20240614_093525.JPG -shave 50x50 -fuzz 45% -define trim:percent-background=98.5% -trim +repage img1.jpg

Эта команда предварительно уменьшает изображение, удаляя висучие виньетки и темные области, позволяя далее корректно обрабатывать изображение с использованием параметров -fuzz и -trim.

Применение:

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

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

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

Оцените материал
Добавить комментарий

Капча загружается...