【发布时间】:2021-05-26 04:46:25
【问题描述】:
我正在使用这个借来的代码来自动计数 DAPI 染色的细胞核。
Hs.dirPath = pwd;
[Hs.dataFiles,Hs.dataNums] = getDataFiles(Hs.dirPath);
[Hs.foundChannels,Hs.fileNums,Hs.imgExts] = getImageFiles(Hs.dirPath);
for i = 1:length(Hs.fileNums)
Hs.fileNum = Hs.fileNums(i);
fileName = ['dapi' sprintf('%03d',Hs.fileNum) '.tif'];
Hs.DI = readmm(fileName);
Hs.DI = Hs.DI.imagedata;
Hs.DI = scale(max(Hs.DI(:,:,round(linspace(10,size(Hs.DI,10),50))),[],3));
binDapi = Hs.DI>adaptthresh(Hs.DI);
masktmp = imclearborder(binDapi | ~Hs.DI);
masktmp = bwareaopen(masktmp,50);
if any(masktmp(:))
binDapi = masktmp;
end
L = bwlabel(binDapi);
numObjects = max(L,[],1:2);
Hs.currObjs = [];
Hs.allMasks = [];
for j = 1:numObjects
fnumStr = sprintf('%03d',Hs.fileNum);
objMask = L == j;
newObj = improc2.buildImageObject(objMask, fnumStr, Hs.dirPath);
Hs.currObjs = [Hs.currObjs, newObj];
Hs.allMasks = cat(3,Hs.allMasks,objMask);
end
objects = Hs.currObjs;
save(sprintf('%s%sdata%03d.mat',Hs.dirPath,filesep,Hs.fileNum),'objects');
[Hs.dataFiles,Hs.dataNums] = getDataFiles(Hs.dirPath);
clear objects;
Hs.currObjs = [];
end
它最终融合了不同平面上的原子核。在这里显示的图像中应该有 14 个原子核,但 1 和 6、2 和 5 以及 3 和 7 最终被视为相同。
我已尝试更改阈值等,但对堆栈没有帮助。
对修改代码有什么建议吗?谢谢。 Matlab output left, manually counted nuclei right
【问题讨论】:
-
如果您发布原始图像,我们可能会帮助您提出新的图像处理技术。由自适应阈值算法
adaptthresh形成的图像蒙版似乎无法形成您想要的蒙版。如果是我,我会尝试imsegkmeans。 -
谢谢。我添加了原始图像的投影(tif 堆栈太大而无法上传)。我会尝试 imsegkmeans。谢谢!