gpt4 book ai didi

python - 显微镜图像分割 : bacteria segmentation with python

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:30 25 4
gpt4 key购买 nike

我正在尝试分割一些显示一些 E 的显微明场图像。大肠杆菌。我正在处理的图片类似于这张图片(即使这张图片是通过相差获得的):

microscopy bright-field image

我的问题是,在运行我的分割函数(下面的 OtsuMask)后,我无法区分 split 的细菌(您可以在示例图像上尝试下面的代码)。这意味着我得到的是一对末端连接在一起的细菌的单个标记区域,而不是两个不同的标记图像。两个 split 细菌之间的边界太窄,无法通过我对阈值图像执行的形态学操作突出显示,但我想一定有办法实现我的目标。

有什么想法/建议吗?

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 中代码的第一部分由平面拟合和减法组成。

最佳答案

this related stackoverflow answer 中描述的方法类似的方法可以在这里使用。

基本上是这样的:

  • 像你所做的那样调整你的形象

  • 对阈值图像应用距离变换

  • 对距离变换设置阈值,以便每个细菌只保留一小部分“种子”

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

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

查看一些图片的链接答案,这些图片将使这一点更加清晰。

关于python - 显微镜图像分割 : bacteria segmentation with python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24736808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com