Маркировка подключенных компонентов с помощью ImageMagick

Можно ли с помощью ImageMagick выполнить маркировку связанных компонентов на изображении?

Маркировка подключенных компонентов в Википедии


person nimiq    schedule 17.01.2013    source источник


Ответы (1)


Да, теперь это возможно с ImageMagick 6.8.9-10 и новее, см. здесь.

Итак, если мы начнем с этого изображения:

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

мы можем получить помеченные компоненты, а также ограничивающие прямоугольники, центроиды и другую статистику для каждого blob или component следующим образом:

convert input.png                                    \
    -colorspace gray -negate -threshold 10%          \
    -define connected-components:verbose=true        \
    -define connected-components:area-threshold=100  \
    -connected-components 8 -auto-level output.png

Objects (id: bounding-box centroid area mean-color):
  0: 600x600+0+0 296.9,299.6 260033 srgb(0,0,0)
  2: 467x345+70+211 350.1,398.1 53563 srgb(255,255,255)
  1: 422x105+56+81 266.5,133.0 34814 srgb(255,255,255)
  4: 105x90+112+310 164.0,354.5 9450 srgb(255,255,255)
  3: 178x73+393+246 481.5,282.0 2140 srgb(255,255,255)

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

Затем вы можете нарисовать ограничительную рамку следующим образом:

convert output.png -fill none -stroke red \
  -draw "rectangle 70,211 537,556"        \
  -draw "rectangle 56,81 478,186"         \
  -draw "rectangle 112,310 217,400"       \
  -draw "rectangle 393,246 571,319"       \
  x.png

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

person Mark Setchell    schedule 10.02.2015
comment
Как обрезать эти прямоугольники в разные файлы? - person Sigur; 29.11.2016
comment
@Sigur Если хочешь, скажи. второй BLOB-объект в отдельном файле использует convert input.png -crop 467x345+70+211 blob2.png - person Mark Setchell; 29.11.2016
comment
Идеально. Теперь мне нужно только, как сделать это автоматически, исходя из информации, сохраненной во внешнем файле. Мне нужно вырезать только некоторые части, а не все. - person Sigur; 29.11.2016
comment
Задайте это как новый вопрос, указав вашу ОС, внешний вид внешнего файла и т. Д., Скопируйте ссылку на новый вопрос и вставьте ее сюда, и я посмотрю утром. Вопросы и ответы бесплатны :-) - person Mark Setchell; 29.11.2016
comment
Спасибо. Сначала я попробую несколько идей. В случае проблемы, обязательно спрошу. С Уважением. - person Sigur; 29.11.2016
comment
Можно ли немного увеличить ограничительную рамку перед автоматической обрезкой? - person Sigur; 29.11.2016
comment
да. Первые два числа - это ширина и высота, поэтому, если вы хотите, чтобы ваше окно было на 10 пикселей шире и выше, добавьте 10 к каждому из первых двух чисел. Вторые два числа - это смещение по осям x и y от верхнего левого угла, поэтому вычтите 5 из каждого из них. Это даст convert image.png -crop 477x355+65+206 blob2.png в предыдущем примере. - person Mark Setchell; 29.11.2016
comment
Да я вижу. Но я искал какую-то команду, чтобы сделать это пакетным способом. У меня более 1000 файлов с большим количеством компонентов. Я полагаю, что у них есть какая-то команда вроде -crop axb+c+d -expand 10px для расширения ББ. В любом случае, может быть, я смогу сохранить координаты и вычислить в цикле. Спасибо. - person Sigur; 29.11.2016
comment
О, я вижу. Вы можете использовать -border 10, но это добавит границу вашего цвета фона, а не извлечет большую часть исходного изображения, которое может отличаться. - person Mark Setchell; 29.11.2016
comment
Или вы можете написать простой bash скрипт (если вы не в Windows) для извлечения геометрии обрезки и ее изменения. - person Mark Setchell; 29.11.2016
comment
Или вы можете использовать морфологическое расширение для увеличения ваших объектов перед выполнением анализа связанных компонентов, а затем применить геометрию расширенного изображения к исходному нерасширенному изображению, чтобы получить объекты в их исходных размерах на более крупном фоне. . - person Mark Setchell; 29.11.2016
comment
Попробую bash скрипт. Я с удовольствием учусь писать сценарий. Спасибо. - person Sigur; 29.11.2016