Сегментация клеток с помощью opencv и python

Компьютерное зрение, OpenCV

Сегментация клеток с помощью opencv и python

Сообщение adrianoff » 25 янв 2018, 19:21

Здравствуйте.

Есть вот такая картинка:
Изображение

Необходимо определить область каждой клетки, отделить ее от соседней, обвести контуром. Некоторые клетки находятся в процессе деления, их необходимо выделить особенно (другим цветом). Также надо посчитать количество клеток. Каждая клетка должна превратится в некий объект для дальнейшего анализа. Вот такая задача сигментации. Пытаюсь решать ее с помощью opencv и python. В opencv я совсем новичок, поэтому для начала попробовал алгоритм из документации для сегментации монет: https://docs.opencv.org/3.3.1/d3/db4/tutorial_py_watershed.html. Но для моей картинки это не подходит, контуры плохо выделяются, получается каша. Видимо это из-за того что внутренности клетки примерно одно цвета с фоном. Пробовал играться с параметрами, но безуспешно. Добился вот такой картинки:

Изображение

На этом этапе и застрял. Сомневаюсь что я двигаюсь в правильном направлении.

Мой вопрос:
1. Какой алгоритм подошел бы мне?
2. С чего начинать?
3. Что почитать на этот счет?

P.S. Картинки в более высоком разрешении:

https://www.dropbox.com/s/q1ge314u0t0jtoz/1.jpg?dl=0
https://www.dropbox.com/s/3wmbal9il24kgla/2.png?dl=0

Заранее благодарю.
adrianoff
 
Сообщения: 2
Зарегистрирован: 25 янв 2018, 18:49
programming: python

Re: Сегментация клеток с помощью opencv и python

Сообщение admin » 26 янв 2018, 11:06

В настоящее время, подобные задачи сегментации, лучше всего помогают решать нейронные сети с архитектурой U-Net.
Соответственно, начать придётся с подготовки обучающей выборки, где придётся разметить маски вручную.
U-Net хорош тем, что хорошо обучается даже на небольшом количестве примеров.
Аватара пользователя
admin
Администратор
 
Сообщения: 315
Зарегистрирован: 05 май 2011, 14:57
Откуда: Калининград

Re: Сегментация клеток с помощью opencv и python

Сообщение adrianoff » 26 янв 2018, 12:38

admin писал(а):В настоящее время, подобные задачи сегментации, лучше всего помогают решать нейронные сети с архитектурой U-Net.
Соответственно, начать придётся с подготовки обучающей выборки, где придётся разметить маски вручную.
U-Net хорош тем, что хорошо обучается даже на небольшом количестве примеров.


У меня картинка всего одна. Думаете из нее можно будет составить полноценную обучающую выборку? Может быть есть какой-то алгоритм без машинного обучения? Например, на второй картинке посчитать количество "окружностей". То есть, возможно ли, привести эту картинку к такому виду чтобы можно было скормить какому-нибудь Watershed и получить результат?
adrianoff
 
Сообщения: 2
Зарегистрирован: 25 янв 2018, 18:49
programming: python

Re: Сегментация клеток с помощью opencv и python

Сообщение admin » 29 янв 2018, 11:05

В таком случае, можно попробовать контурный анализ.
Код: Выделить всё
#!/usr/bin/python3
# -*- coding: utf-8 -*-

'''
calc cells

http://robocraft.ru/forum/viewtopic.php?f=7&t=1070

https://docs.opencv.org/3.1.0/da/d22/tutorial_py_canny.html
'''

__author__ = ''

import numpy as np
np.random.seed(42)

import cv2

image_name = 'cells.jpg'

img = cv2.imread(image_name)
print('img.shape:', img.shape)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

edges = cv2.Canny(gray, 30, 70)
cv2.imshow("Canny", edges)

im2, contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE ,cv2.CHAIN_APPROX_SIMPLE)

img2 = img
cv2.drawContours(img2, contours, -1, (0,255,0), 3)

cv2.imshow("drawContours", img2)
cv2.waitKey(0)
Аватара пользователя
admin
Администратор
 
Сообщения: 315
Зарегистрирован: 05 май 2011, 14:57
Откуда: Калининград


Вернуться в Компьютерное зрение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

© 2009-2017 |  О проекте  |  Политика Конфиденциальности  |