일부 현미경으로 밝은 영역 이미지를 분할하려고합니다. E. coli 박테리아. I 유사한와 (본는 위상 콘트라스트를 얻을 경우에도) 이것을 일하고 사진 :현미경 이미지 세분화 : 파이썬으로 세균 세분화
내 문제 내 세그멘테이션 기능을 실행 한 후 (아래 OtsuMask) I는 (분할 박테리아를 구별 할 수 있다는 것이다을 샘플 코드에서 아래 코드를 사용해보십시오.) 즉, 두 개의 서로 다른 레이블이있는 이미지 대신 끝에 붙어있는 두 개의 박테리아에 대해 하나의 레이블이 지정된 영역을 얻게됩니다. 박테리아를 구분하는 경계가 너무 좁아서 임계 값 이미지에서 수행하는 형태 작업에 의해 강조 표시되지 않지만 내 목표를 달성 할 수있는 방법이 있어야합니다.
아이디어가 있습니까?
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 IN 코드의 첫번째 부분은 평면 FITTING AND 감산 이루어져있다.
그리고 개봉을하면 어떻게됩니까? – kkuilla
감사합니다 kkuilla 당신이 의견을. 처음 시도한 것은 내가 시도한 첫 번째 결과 중 하나였습니다. 결과는 그렇게 흥미롭지 않았습니다 .. – JacoSolari