Вопрос Обрезка внешнего пустого пространства с помощью ImageMagick не работает на отсканированных документах


Учитывая изображение, в котором есть некоторый фактический контент внутри и, как правило, некоторые нежелательные белые или черные или прозрачные вокруг него, я хотел бы обрезать или обрезать внешние части с помощью 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, которая надежно сглаживает созданные компьютером изображения, чтобы она максимально надежно отсканировала отсканированные документы вышеприведенного стиля?


4
2018-06-14 02:17


происхождения


Если вы посмотрите на свое отсканированное изображение, стороны, очевидно, имеют несколько небелых областей. Значение для ImageMagick у него по-прежнему имеет контент, который он не может урезать, поскольку изображение все еще имеет контент. Нет простого решения, о котором я знаю. - JakeGould
Зачем усложнять вещи? Используйте функцию автоматического обрезания в драйвере сканера, и все готово. Некоторые драйверы сканера также предлагают удаление темных краев, как показано на сканированном примере. Возможно, ImageMagick предлагает также удаление темных краев. - user291737
@ user291737 Спасибо! Я хотел бы, чтобы это было возможно, но это не так. Легко представить некоторые из вариантов использования, когда это невозможно: ваш сканер может не поддерживать эту функцию, вы можете выполнять обработку для кого-то еще (кто использовал свой сканер, к которому у вас нет доступа) и т. Д. - caw
Как насчет потенциального тестирования с помощью -shave и посмотреть, можете ли вы просто брить с краев, а затем использовать используемую вами логику? Дайте мне знать, если это поможет, но посмотрите и то и другое эти ссылки, когда вы получаете шанс - Pimp Juice IT
Взгляните на сценарии Fred's ImageMagick AutoTrim а также MULTICROP, Видеть это Связанная статья, - harrymc


ответы:


Вы можете использовать -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>

До

enter image description here

После

enter image description here


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

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

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

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

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

    Как и раньше, все операторы «-границы», «-frame» и   "-shave»,   только эффект реального изображения на виртуальном холсте, а не виртуальном   сам холст.

    источник


3
2018-06-19 18:09



Спасибо за это! Ну, -shave опция работает нормально, по крайней мере, так кажется. Я не знал этого варианта (как-то всегда его игнорировал), и это очень полезно для краев. Используя что-то вроде -shave 90x90 для образца изображения все края исчезли. Но, ребра никогда не были единственной проблемой. Даже после их полного удаления и даже с мягкими настройками, такими как -fuzz 80%, верхняя белая часть удаляется только, если вообще. Кажется, что в белых областях, созданных сканером, есть «грязь», что предотвращает -trim от работы. Возможно, нет лучшего решения. - caw
Не совсем уверен, потому что он на самом деле не устранил проблему или не ответил на весь вопрос, а просто рассмотрел ее часть. Во всяком случае, я уже получил награду (+100). - caw
На самом деле это именно тот образ из вопроса, с которым я работаю: i.stack.imgur.com/yVhlM.jpg Я пробовал все команды и параметры с этим изображением. Не работает для меня. - caw
Еще раз спасибо! Вместе со вторым ответом это действительно работает отлично. - caw


Удалите грязь или шум из изображений с помощью 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

До

enter image description here

После

enter image description here


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

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

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

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

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

Код

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
2018-06-26 03:34



Выполнение этого перед другой командой (-trim) очищает и обрезает изображение по желанию. Большое спасибо! - caw


Что в конечном итоге обеспечило отличные результаты, по крайней мере для моего конкретного примера, показанного в исходном вопросе (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 оператора, предложенного в этот ответ

1
2018-06-26 15:05