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