Как можно вычислить и найти распределение областей объектов на изображении с помощью Python? - PullRequest
0 голосов
/ 08 января 2019

Я хотел бы получить области в пикселях и распределения различных черных объектов на этом изображении. Я предполагаю, что с python (openCV или mahotas) это возможно, но я не знаю как.

enter image description here Вы можете мне помочь?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вот альтернативное решение, учитывая, что ваш вопрос, похоже, не предназначен для использования какого-либо конкретного инструмента. Он использует ImageMagick , который установлен в большинстве дистрибутивов Linux и легко доступен для macOS и Windows. Вы просто запускаете следующее в окне терминала:

convert blobs.png -threshold 50% -negate     \
   -define connected-components:verbose=true \
   -connected-components 8 info: | awk '/255,255,255/{print $4}'

Ниже приведен пример вывода, и это размер (в пикселях) каждого шарика, найденного на изображении:

19427
2317
2299
1605
1526
1194
1060
864
840
731
532
411
369
313
288
259
253
244
240
238
216
122
119
90
73
70
36
23
10

Чтобы лучше понять это, удалите материал awk, чтобы вы могли увидеть вывод «Анализ подключенных компонентов» :

convert blobs.png -threshold 50% -negate -define connected-components:verbose=true -connected-components 8 info:

Objects (id: bounding-box centroid area mean-color):
  0: 675x500+0+0 341.1,251.2 301025 srgb(0,0,0)
  13: 198x225+232+119 341.5,227.0 19427 srgb(255,255,255)
  24: 69x62+232+347 269.4,378.9 2317 srgb(255,255,255)
  22: 40x90+67+313 88.8,354.8 2299 srgb(255,255,255)
  20: 55x50+121+278 153.3,299.5 1605 srgb(255,255,255)
  10: 34x82+107+78 126.2,115.5 1526 srgb(255,255,255)
  25: 34x47+439+350 455.4,371.5 1194 srgb(255,255,255)
  16: 26x69+422+183 435.4,217.6 1060 srgb(255,255,255)
  19: 27x44+231+264 243.6,284.1 864 srgb(255,255,255)
  ...
  ...
  21: 5x9+0+284 1.8,288.8 36 srgb(255,255,255)
  29: 6x5+57+467 59.9,468.7 23 srgb(255,255,255)
  4: 6x2+448+0 450.5,0.4 10 srgb(255,255,255)

По сути, для каждого большого двоичного объекта есть одна строка вывода. В этой строке указывается позиция x,y в верхнем левом углу объекта BLOB, а также его ширина и высота. Он также сообщает вам центроид, площадь (в 4-м столбце, поэтому я напечатал $4 в awk) и цвет. Обратите внимание, что ваши черные пятна выглядят как белые (255 255 255), потому что я перевернул ваше изображение (с -negate), поскольку ImageMagick ищет белые объекты на черном фоне.

Итак, если я возьму линию, начинающуюся 13:, и нарисую прямоугольник, содержащий каплю:

convert blobs.png -fill none -stroke red -draw "rectangle 232,119 430,343" result.png

enter image description here

0 голосов
/ 10 января 2019

Я бы использовал scikit-image . Для меня это выглядит как двоичное изображение (0 и 1), так что вы можете использовать функцию regionprops , чтобы получить список объектов regionprops.

Regionprops игнорирует 0s (в вашем случае это черный цвет), поэтому вам может потребоваться инвертировать изображение.

...