Найти эллипсы в изображениях клеток - PullRequest
1 голос
/ 27 марта 2020

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

tissue section

Здесь они выглядят как круги, но в общих случаях они образуют приблизительные эллипсы.

Я пытался использовать canny, findContours или hough_ellipse в openCV, но безуспешно.

Есть идеи?

1 Ответ

1 голос
/ 28 марта 2020

Я не потратил слишком много времени на полировку этого ответа, но он должен помочь вам начать, а затем вы можете привести его в порядок. Основная идея c состоит в том, чтобы преобразовать ваш желтый цвет в белый, а все остальное в черный:

#!/usr/bin/env python3

import numpy as np
import cv2
from scipy.ndimage.morphology import distance_transform_edt

# Load the image
im = cv2.imread('cells.png')

# Form binary image which is white where orginal is yellow and black everywhere else
B = np.zeros_like(im[...,0])
B = im == [38, 230, 253]
cv2.imwrite('tmp.png', (B*255).astype(np.uint8))

Это дает вам следующее:

enter image description here

Теперь, сделайте преобразование расстояния :

# Get distance transform
distance = distance_transform_edt(B)

# Normalise for contrast and save
cv2.normalize(distance, distance, 0, 255, cv2.NORM_MINMAX)
cv2.imwrite('result.png', distance.astype(np.uint8))

enter image description here

Таким образом, в основном, ярче точка в результате изображение, тем дальше от клеточных стенок и других вещей. Затем вы можете найти максимумы здесь и использовать их для дальнейшей проверки.

...