Python中不均匀对比度的图像分割

时间:2019-07-16 10:38:28

标签: python computer-vision

我有许多用光学显微镜捕获的细胞图像。我的方法无法在对比度太低的情况下分割像元。我遵循了不同的教程,这些教程可与其他图像配合使用,但在这种情况下效果不佳。

我遵循了不同的教程,获得的最佳结果是使用scikit-image。我正在发布一个示例图像的代码。显示方式我能够分割一些单元格(在左侧)。右侧的单元格全部融合在一个对象中。

这是示例图片: enter image description here

import matplotlib.pyplot as plt
import numpy as np
from skimage.io import imread
I = imread("https://i.ibb.co/m9ZtnXL/SK-C-1-1-25-u-M-72h.jpg", as_gray = True)
plt.imshow(I, cmap= "gray")
plt.show()
#Sobel filter 
from skimage.filters import sobel
I_edges = sobel(I)
plt.imshow(I_edges, cmap='gray')
plt.show()
# Threshold on edges
from skimage.filters import threshold_otsu
threshold_level = threshold_otsu(I)
bw = I > threshold_level # bw is a standard variable name for binary images
threshold_level
plt.imshow(bw, cmap='gray')
plt.show()
#  clear any small object noise
from skimage.morphology import remove_small_objects
bw_cleared = remove_small_objects(bw, 300) # clear objects <300 px
plt.imshow(bw_cleared, cmap='gray')
plt.show()
# close the edges of the outline with morphological closing
from skimage.morphology import binary_closing, disk, square
bw_close = binary_closing(bw_cleared, selem=disk(5))
plt.imshow(bw_close, cmap='gray')
plt.show()

# Now let's fill in the holes
from scipy.ndimage import binary_fill_holes
bw_fill = binary_fill_holes(bw_close)
plt.imshow(bw_fill, cmap='gray')
plt.show()

# Plot an overlay of our binary image
f = plt.figure()
plt.imshow(I, cmap='gray', interpolation=None)
plt.imshow(bw_fill, cmap='gray', alpha=0.5, interpolation=None)
plt.show()

我想将所有单个单元格分开,每个单元格作为一个不同的对象。目的是计算每个单个图像中的细胞数量以及每个图像中所有细胞所占的面积。

这是我取得的成就

enter image description here

感谢您的帮助

0 个答案:

没有答案