Як бінарнізувати кольорове зображення?


14

У мого друга є кольорове зображення з китайським почерком (в основному фотографуванням або скануванням того, що він написав на аркуші білого паперу), і він хотів би, щоб я перетворив його на чорно-біле бінарне зображення. Чи є в Ubuntu додатки, які можуть це досягти?

Ось приклад зображення:

введіть тут опис зображення


Відповіді:


27

Те, що ви хочете, називається "поріг" при обробці зображень. В основному, він приймає зображення як вхідний і виводить зображення, яке має всі пікселі зі значенням нижче заданого порогу, встановленого на чорний, і всіх пікселів, значення яких вище порогового значення, встановленого на білий. Це призводить до отримання чорно-білого зображення з довільного вхідного зображення.

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

Ви можете використовувати графічний інструмент, такий як GIMP, щоб це зробити інтерактивно (ви знайдете інструмент через головне меню -> Кольори -> Поріг), або ви можете використовувати ImageMagick щось подібне:

convert colored.png -threshold 75% thres_colored.png

Запуск вищевказаної команди на прикладі зображення дає результат, показаний нижче.

Чорно-біла версія образу OP

Оскільки порогування часто є дещо процесом проб і помилок, щоб отримати результат, яким ви задоволені, особливо якщо вихідне зображення вже не дуже близьке до чорно-білого, я рекомендую підхід GUI, якщо це можливо, але якщо це не варіант, з якої причини ви можете це зробити і через командний рядок. Для більш точного контролю виводу, ви можете спочатку використовувати такі інструменти, як кольорові криві, рівні та контраст, щоб краще виділити світлу та темну ділянки зображення перед встановленням порогу. (Насправді поріг можна розглядати як крайній випадок використання інструменту кольорових кривих.)


2
Спасибі! Оскільки кольорове зображення має три канали RBG, до чого взагалі застосовується поріг?
Тім

@Tim Це, мабуть, залежить від програмного забезпечення, але я б очікував, що поріг (якщо ви не вказали для кожного каналу або для конкретного каналу, див. Наприклад, -channelпараметр перетворення ImageMagick ) буде застосований до якогось "значення" пікселя, яке обчислюється з усіх каналів. Ось чому я сказав, що ви, можливо, хочете спершу перейти в масштаб сірого для отримання більш передбачуваних результатів. (Також дивіться мою редакцію.)
CVn

Спасибі! Чи існує якась документація для того, на який поріг застосовується команда, показана у вашій посаді?
Тим

@Tim Не дуже. Я очікував, що конвертування візьме або відсоток від максимального значення (яке повинно було бути 256 на канал), або конкретне значення, але я міг отримати корисний результат лише вказавши відсоток. Коли ви робите це за допомогою графічного інструмента, включаючи GIMP, у вас зазвичай буде гістограма, яка показує тональний розподіл зображення; це буде великою підмогою у виборі належної вартості. Використовувати лише командний рядок, якщо у вас немає конкретної причини для цього, мабуть, більше проблем, ніж варто.
CVn

2
Як бічне зауваження, існують інші методи порогових значень, які не повинні покладатися на жорстко закодований пороговий рівень. Наприклад, ImageMagick включає, -latякий виконує локальний адаптивний поріг з урахуванням оточуючих пікселів.
voithos

7

Ви можете використовувати Imagemagick:

convert test.png -colorspace Gray gray_colorspace.png

Від сюди .

Ось що я отримав після застосування до вашого зображення:

введіть тут опис зображення


10
"Бінарний" походить від "bi", що означає "два", тому я припускаю, що ОП хоче перетворити зображення в чистий чорно-білий. Перетворення в масштаби сірого дає значно більше, ніж два рівні.
CVn

Домовились! має сенс, +1.
mkc

2

-monochrome від ImageMagick - це параметр, який використовує розумне забарвлення, і робить результат набагато помітнішим, ніж-thresholdякщо ви плануєте це для споживання людиною:

convert -monochrome signature.png out.png

введіть тут опис зображення

Не має великої різниці для такого простого зображення, але для великих розмірів це вражає.


1

Ви також можете це легко зробити за допомогою netpbmінструментарію:

anytopnm inputfile | ppmtopgm | pgmtopbm > outputfile

ppmtopgmперетворюється в зображення в масштабах сірого, pgmtopbmперетворюється на чорно-біле зображення, а потім перенаправляємо вихід у файл. Він буде у форматі pbm; якщо ви хочете щось більш загальне, вам доведеться додати вихідний перетворювач (наприклад, pnmtopngабо якийсь подібний)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.