显微镜图像分割:用python进行细菌分割

哈科·索拉里

我正在尝试对显示某些大肠杆菌的显微镜明视野图像进行分段我正在处理的图片类似于此图片(即使此图片是通过相衬获得的):

显微镜明场图像

我的问题是,运行分割功能(下面的OtsuMask)后,我无法区分正在分裂的细菌(您可以在示例图像上尝试下面的代码)。这意味着我得到了一对细菌的单个标记区域,这些细菌的末端相连,而不是两个不同的标记图像。我在阈值图像上执行的形态学操作无法区分两个分裂细菌之间的边界,但是我想必须有一种方法可以实现我的目标。

有什么想法/建议吗?

import scipy as sp
import numpy as np
from scipy import optimize
import mahotas as mht
from scipy import ndimage
import pylab as plt


def OtsuMask(img,dilation_size=2,erosion_size=1,remove_size=500):

    img_thres=np.asarray(img)
    s=np.shape(img)    
    p0=np.array([0,0,0])

    p0[0]=(img[0,0]-img[0,-1])/512.    
    p0[1]=(img[1,0]-img[1,-1])/512.
    p0[2]=img.mean()

    [x,y]=np.meshgrid(np.arange(s[1]),np.arange(s[0]))

    p=fitplane(img,p0)    
    img=img-myplane(p,x,y)    


    m=img.min()
    img=img-m
    img=abs(img)
    img=img.astype(uint16)

    """perform thresholding with Otsu"""
    T = mht.thresholding.otsu(img,2)
    print T
    img_thres=img
    img_thres[img<T*0.9]=0
    img_thres[img>T*0.9]=1


    img_thres=-img_thres+1  

    """morphological operations"""
    diskD=createDisk(dilation_size)
    diskE=createDisk(erosion_size)

    img_thres=ndimage.morphology.binary_dilation(img_thres,diskD)   

    labeled_im,N=mht.label(img_thres)
    label_sizes=mht.labeled.labeled_size(labeled_im)
    labeled_im=mht.labeled.remove_regions(labeled_im,np.where(label_sizes<remove_size))    


    figure();
    imshow(labeled_im)

    return labeled_im

def myplane(p,x,y):

    return p[0]*x+p[1]*y+p[2] 

def res(p,data,x,y):

    a=(data-myplane(p,x,y));

    return array(np.sum(np.abs(a**2)))

def fitplane(data,p0):

    s=shape(data);

    [x,y]=meshgrid(arange(s[1]),arange(s[0]));
    print shape(x), shape(y)

    p=optimize.fmin(res,p0,args=(data,x,y));
    print p
    return p


def createDisk( size ):
    x, y = np.meshgrid( np.arange( -size, size ), np.arange( -size, size ) )
    diskMask = ( ( x + .5 )**2 + ( y + .5 )**2 < size**2)
    return diskMask

OtsuMask中代码的第一部分由平面拟合和精简组成。

雨果·符恩

可以使用与此相关stackoverflow答案中描述的方法类似的方法

它基本上是这样的:

  • 像完成阈值操作一样

  • 在阈值图像上应用距离变换

  • 设定距离转换的阈值,以便每种细菌仅保留一小部分“种子”

  • 标记这些种子,为每个种子赋予不同的灰色阴影
    (还为背景添加一个标记的种子)

  • 使用这些种子和距离变换后的图像执行分水岭算法,以获取细菌的分离轮廓

查看链接的答案中的一些图片,这些图片可以使内容更加清晰。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

去除显微镜拍摄的图像中的条纹图案

来自分类Dev

流星显微镜激活光标

来自分类Dev

流星显微镜激活光标

来自分类Dev

如何安装 Microdia UVC 显微镜?

来自分类Dev

流星中的制表键-了解显微镜示例

来自分类Dev

从电子显微镜结构中提取链

来自分类Dev

流星中的制表键-了解显微镜示例

来自分类Dev

我的USB显微镜停止工作

来自分类Dev

如何使用db15输入套接字将命令从Python 3.4发送到电动XY显微镜载物台

来自分类Dev

使用python进行图像分割的“硬”监督

来自分类Dev

在python中分割图像

来自分类Dev

用python分割文字

来自分类Dev

用Python分割值

来自分类Dev

分水岭图像分割JavaCv,未进行分割

来自分类Dev

使用线边缘进行Matlab图像分割

来自分类Dev

在页面上分割图像以进行打印

来自分类Dev

使用 imageSegmenter 工具进行 Matlab 图像分割

来自分类Dev

使用 GMM 进行灰度图像分割

来自分类Dev

图像分割

来自分类Dev

给定图像中区域的边界,进行图像分割

来自分类Dev

通过用'\ t'分割在python中分割列表元素

来自分类Dev

使用Python图像处理对生物样品的照片进行分割,以提取感兴趣的圆形区域

来自分类Dev

通过k进行图像分割意味着在python中聚类

来自分类Dev

使用python在图像上使用最大似然算法进行分割

来自分类Dev

在python中使用OpenCV分割图像

来自分类Dev

在python中使用OpenCV分割图像

来自分类Dev

用python3.x在numpy中进行地板分割的ufunc是什么?

来自分类Dev

用python中的空格重新分割

来自分类Dev

Python用前缀分割字符串