【问题标题】:Matlab Automatic Nuclei Count stacksMatlab 自动核计数堆栈
【发布时间】: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

Here is the av intensity projection of the original image

【问题讨论】:

  • 如果您发布原始图像,我们可能会帮助您提出新的图像处理技术。由自适应阈值算法adaptthresh 形成的图像蒙版似乎无法形成您想要的蒙版。如果是我,我会尝试imsegkmeans
  • 谢谢。我添加了原始图像的投影(tif 堆栈太大而无法上传)。我会尝试 imsegkmeans。谢谢!

标签: matlab image-processing


【解决方案1】:

我认为 MATLAB 的 imfindcircles 在这里可能有用。它高估了 #14,但似乎比你现在拥有的要好。

img = imread('Okqii.jpg');

mask = imbinarize(img,'adaptive');

cc = bwconncomp(mask);
lm = labelmatrix(cc);

imshow(img), hold on

for idx = 1:cc.NumObjects
  [c,r] = imfindcircles(lm == idx, [15,100], 'ObjectPolarity','bright');
  viscircles(c,r,'Color','b');
end

【讨论】:

  • 这很酷,我会玩弄它。它似乎不适用于 tif 堆栈 - 对此有何想法?非常感谢!
  • 老实说,我不熟悉 tiff 堆栈或它们的工作方式。如果没有 tiff 堆栈来试验自己,恐怕我无能为力。
  • 我一直在试图弄清楚如何压缩 tiff 堆栈以便上传它,但现在是空白。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 2023-04-10
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
相关资源
最近更新 更多