4

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

Следующее изображение было нарисовано в цифровом виде на компьютере (в HTML <canvas>):

canvas.png

Следующая команда ImageMagick - это то, что я пробовал:

$ convert canvas.png -trim +repage canvas_trimmed.png

И это сработало отлично:

canvas_trimmed.png

Так что это именно то, что я хочу. Но теперь я хочу, чтобы это работало и с отсканированными документами, которые не настолько "идеальны", как изображения, сгенерированные компьютером, то есть имеют больше оттенков "белого" и "черного" и не имеют прозрачности, которую было бы легче обнаружить. Иногда у них даже есть черные полосы вокруг белого фона бумаги, потому что область сканера больше, чем бумага:

scan.jpg

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

$ convert scan.jpg -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 10% -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -bordercolor white -border 1x1 -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -bordercolor black -border 1x1 -trim +repage scan_trimmed.jpg

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

3 ответа3

4

Вы можете использовать -shave и просто сбрить края, а затем использовать логику, которую вы используете впоследствии, для соответствующей обработки.

Примечание: Сумма , которую вы брить от (например , аргумент после «-shave» 40x40 или 10x10 и т.д.) имеет важное значение , так что не забудьте тщательно проверить , чтобы убедиться , эта установка работает повсеместно в вашей среде для ваших изображений.

Пример логики

@ECHO ON

SET Convert="C:\Program Files\ImageMagick\Convert.exe"
%convert% C:\Folder\Circle.jpg -shave 40x40 C:\Folder\ShavedCircle.jpg
<The rest of your logic against C:\Folder\ShavedCircle.jpg now>

До

После


Дополнительные ресурсы

  • Бритье, удаляя края с изображения

    Обратной операцией «-border» или «-frame» является « -shave », которая, если заданы те же аргументы, удалит пространство, добавленное этими командами.

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

    Если вы хотите удалить только один край изображения, вам нужно будет использовать оператор «-chop». (См. Примеры Чопа ниже).

    Как и прежде, все операторы «-border», «-frame» и « -shave » воздействуют только на реальное изображение на виртуальном холсте, но не на сам виртуальный холст.

    источник

2

Удаление грязных пятен или шума с изображений с помощью ImageMagick

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

Пример логики

@ECHO ON

SET Convert="C:\Program Files\ImageMagick\Convert.exe"
%convert% C:\Folder\Circle.jpg -shave 90x90 C:\Folder\ShavedCircle.jpg
%convert% C:\Folder\ShavedCircle.jpg -write MPR:source ^
  -morphology close rectangle:3x4 ^
  -morphology erode square    MPR:source -compose Lighten -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
C:\Folder\cleaned.jpg

До

После


Из-за природы звонящего шума все черные помехи отделены как минимум на 1 пиксель от букв.

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

Таким образом, форма букв и других больших сгустков сохраняется идеально, а более мелкие сгустки исчезают.

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

Эта команда сначала расширяет этот прямоугольник 3x4, затем end, а затем размывает до тех пор, пока буквы снова не станут целыми.

Код

convert cleanup.tif -write MPR:source ^
  -morphology close rectangle:3x4 ^
  -morphology erode square    MPR:source -compose Lighten -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  cleaned.png

источник


Дополнительные ресурсы

1

То, что в конечном итоге дало отличные результаты, по крайней мере для моего конкретного примера, показанного в исходном вопросе (scan.jpg), было следующее двухэтапное решение:

convert \
    scan.jpg \
    -write MPR:source \
    -morphology close rectangle:3x4 \
    -clip-mask MPR:source \
    -morphology erode:8 square \
    +clip-mask \
    scan_intermediate.jpg

convert scan_intermediate.jpg -shave 40x40 -fuzz 10% -trim +repage scan_final.jpg

Это решение состоит из трех частей:

  1. Команда из моего оригинального вопроса
  2. Удаление шума показано в этом ответе
  3. -shave оператор предложил в этом ответе

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .