Как игнорировать пыль / пятнышки на фоне при обрезке изображения после замены цвета фона?
Сейчас я использую Irfanview для пакетной замены фона и обрезки получаемых изображений. Затем я изменяю их размер и добавляю их, чтобы получить хорошие стандарты для использования на моем веб-сайте.
Я играл с допусками, чтобы заменить почти белый фон на чистый белый. Около половины из них обрабатываются без проблем, но когда на заднем плане появляется небольшое пятнышко, инструмент обрезки реагирует так, как если бы он был частью основного изображения, а это не так. Если я увеличу допуск еще больше, он съест главное изображение, и результат будет недостаточно хорош для публикации.
Есть ли обходной путь, чтобы сначала удалить такие пятнышки, прежде чем я начну заменять фон?
PS: сейчас я делаю все это в автономном режиме. При необходимости я могу переместить это онлайн, и на этом этапе я бы предпочел php, так как это язык, с которым я больше всего знаком
Исходное изображение (4752x3168, 3,40 МБ): http://veilinghuiseeckhout.be/test/img/TEST00001.JPG
Результат сейчас (800x800, 136kB): http://veilinghuiseeckhout.be/test/img/TEST00001res.JPG
Желаемый результат (800x800, 394 КБ): http://veilinghuiseeckhout.be/test/img/TEST00001want.jpg
1 ответ
Я не знаю Irfanview
как я склонен использовать ImageMagick
которая бесплатна и доступна для Windows, OSX, Linux и т. д. Она также может быть легко написана из командной строки.
Поскольку у вас есть несколько значительных пыльных пятен, мой подход будет заключаться в том, чтобы размыть изображение довольно сильно и привязать его к чисто черному и белому перед обрезкой, чтобы получить координаты кадрирования, а затем продолжить и обрезать не размытый оригинал. Это выглядит так в командной строке:
convert original.jpg -blur 0x8 -threshold 80% -format "%@" info:
1185x1157+1615+947
Это говорит о том, что... "возьмите оригинал и сильно размыте его, затем установите пороговое значение для всех значений ниже 80% белого до чистого черного и всего выше 80% белого для чистого белого. Затем представьте, что я собираюсь обрезать, и скажите, где вы будете обрезать, пожалуйста."
Ответ означает ImageMagick
теперь будет обрезать прямоугольник шириной 1185 пикселей и высотой 1157 пикселей, начиная с 1615 пикселей от левого поля и 947 пикселей от верхнего края.
Если я сейчас нарисую это на исходном изображении красным цветом:
convert original.jpg -stroke red -fill none -draw "rectangle 1615,947 2799,2103" result.jpg
Или я тоже могу обрезать это:
convert original.jpg -crop 1185x1157+1615+947 result.jpg
Мои навыки работы с Windows ограничены, но в BAT-файле обрезка будет выглядеть так:
FOR /F %%G IN ('convert original.jpg -blur 0x8 -threshold 80%% -format "%%@" info:') DO SET GEOM=%%G
ECHO %GEOM%
convert original.jpg -crop %GEOM% result.jpg
Другой вариант может заключаться в том, чтобы уменьшить высоту и ширину, скажем, в 10 или 20 раз, чтобы пятнышки исчезли, получить прямоугольник обрезки, а затем увеличить масштаб на тот же коэффициент и применить к исходному изображению.
Другим вариантом может быть "Анализ связанных компонентов" с помощью ImageMagick, поэтому дайте мне знать, работает ли вышеуказанный ответ для других ваших изображений, и мы можем разработать другие идеи, если нет.