- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试分割一些显示一些 E 的显微明场图像。大肠杆菌。我正在处理的图片类似于这张图片(即使这张图片是通过相差获得的):
我的问题是,在运行我的分割函数(下面的 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/
我正在尝试分割一些显示一些 E 的显微明场图像。大肠杆菌。我正在处理的图片类似于这张图片(即使这张图片是通过相差获得的): 我的问题是,在运行我的分割函数(下面的 OtsuMask)后,我无法区分 s
最近,我遇到了一个有趣的编程难题,难题中提到了一些曲折。在让我感到惊讶的问题下面,我只是想知道是否有可能在 java 中的任何相关解决方案适用于以下场景。 问题陈述:有一个尺寸为 m*n 的网格,最初
我是一名优秀的程序员,十分优秀!