Watershed неправильно разделяет перекрывающиеся ячейки (Python)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Watershed неправильно разделяет перекрывающиеся ячейки (Python)

Сообщение Anonymous »

Я пытаюсь извлечь контуры клеток из микроскопического изображения в формате .tif. Поскольку некоторые ячейки расположены близко друг к другу, я применяю функцию Ski.segmentation.watershed() к предварительно обработанному изображению (показано в коде ниже). К сожалению, результаты неудовлетворительны, поскольку сложные совокупности клеток обнаруживаются как один большой контур (рисующий внешнюю форму) плюс множество очень маленьких контуров внутри. На прикрепленном изображении показана моя проблема: каждый контур отображается одним случайным цветом, чтобы можно было различать разные контуры, которые выглядят не так, как должны.
Я попробовал масштабировать и повысить резкость изображение, чтобы улучшить детализацию, уменьшив минимальное расстояние, используемое для поиска локальных максимальных координат, но ничего не помогло. Буду признателен за любую помощь или совет, который вы можете мне дать по этому вопросу. Заранее спасибо!

Код: Выделить всё

def watershed2(img_gray, img_rgb, thresh_binary, min_dist, compactness):
_, imgThreshold = cv2.threshold(img_gray, thresh_binary, 255, cv2.THRESH_BINARY)
cells = imgThreshold > 0  # All white pixels from the binary image

distance = ndi.distance_transform_edt(cells)
local_max_coords = ski.feature.peak_local_max(distance, min_distance=min_dist, exclude_border=False)
local_max_mask = np.zeros(distance.shape, dtype=bool)
local_max_mask[tuple(local_max_coords.T)] = True
markers = ski.measure.label(local_max_mask)
segmented_cells = ski.segmentation.watershed(-distance, markers, mask=cells,
compactness=compactness, watershed_line=True)
contours, _ = cv2.findContours(segmented_cells.astype(np.uint8), cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
return contours, distance, local_max_mask, markers, segmented_cells

**Execution**
random.seed(10)
#parameters for image preprocessing
enhance = True
contrast = 2.5
brightness = -18
upscale_factor = 3
sharp = False
split = False

#image preprocessing
img, img3, name = img_preprocessing(img_path, enhance, upscale_factor, sharp, split, contrast, brightness)

#parameters for watershed segmentation
if enhance == True:
thresh_binary = 180
else:
thresh_binary = 55
min_dist = 3
linewidth = 2
compactness = 0

c, distance, local_max_mask, markers, segmented_cells = watershed2(img, img3,
thresh_binary, min_dist, compactness)
#draw contours on image
img3_c = cv2.drawContours(img3, c, -1, (0, 255, 0), linewidth)

mask = np.zeros(img3.shape)

#draw contours in different colours on black mask to distinguish them
for contour in c:
# Generate a random color for the contour
color = (random.randint(100, 255), random.randint(100, 255), random.randint(100, 255))
cv2.drawContours(mask, [contour], -1, color, linewidth)
Это показывает исходное изображение и обнаруженные контуры:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/793 ... tly-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Watershed неправильно разделяет перекрывающиеся ячейки (Python)
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Watershed неправильно разделяет перекрывающиеся ячейки (Python)
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • OpenCV Watershed: 4-точечное подключение
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Python разделяет HTTP-запрос на несколько TCP-пакетов фиксированного размера
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Python разделяет HTTP-запрос на несколько TCP-пакетов фиксированного размера
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»