Нахождение центроидов в большом изображении

1

Я работаю с большими 3D-изображениями (около 8000x5000x50), которые содержат от 1000 до 10000 помеченных сегментов, т.е. связанных областей целых чисел. Мне нужно найти центр масс для каждого объекта, но то, что я пробовал, слишком медленное. Использование SciPy center_of_mass() функции, я просто накинут все ярлыки, как это:

coords = []
for label in range(1, n):
    print("label " + str(label))
    coord = ndimage.center_of_mass(labels, labels, label)
    coords.append(coord)

Это отлично работает, но требуется 5 секунд на ярлык. Что может быть более быстрым способом?

  • 0
    это около 8 ГБ изображения. Это будет медленно.
  • 1
    Выполнение этого параллельно, например, с использованием потоков, может сделать это в 2-8 раз быстрее на обычной многоядерной машине.
Показать ещё 2 комментария
Теги:
image-processing
python-3.x
scipy

1 ответ

0
Лучший ответ

Я нашел способ ускорить процесс, получив ограничивающие поля каждого помеченного объекта из большого исходного изображения (называемые labels), вызвав center_of_mass() на каждом из них индивидуально и переведя результат обратно в координатное пространство исходного изображения:

coords = []
# Get bounding boxes for all objects in the form of slices
objects = ndimage.find_objects(labels)
# Loop over all objects:
for l in range(1, n):
    # Get individual bounding box
    bb_slices = objects[l]
    # Extract object
    obj = labels[bb_slices]
    # Compute centroid
    coord = ndimage.center_of_mass(obj)
    # Translate result from coordinate space of the bounding box back to the source image by simply adding the starting coordinate of each slice
    coord_translated = (np.around(coord[0]).astype(np.uint8) + slices[0].start,       np.around(coord[1]).astype(np.uint8) +
                    slices[1].start, np.around(coord[2]).astype(np.uint8) + slices[2].start)
    coords.append(coord_translated)

Это занимает около 16 секунд для> 900 объектов по сравнению с по меньшей мере часом для исходного метода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню