我对细胞或镶嵌或其他什么一无所知。但是,如果您想检测非均匀背景中的那些斑点,那么我可能会有所帮助。由于背景不统一,您需要单独分析 blob。您不能只设置一个固定阈值来一次检测所有 blob。首先,您将单独检测每个 blob,然后使用单独的阈值。这是示例
原始图像
im=imread('gxGkH.jpg');
figure,imagesc(im);axis image;

我只选择蓝色来分析
imb=im(:,:,3);
figure,imagesc(imb);axis image;

1)模糊图像,因为在模糊后,斑点将在其中心具有局部最大值/最小值
sigma=7;
kernel = fspecial('gaussian',4*sigma+1,sigma);
im2=imfilter(imb,kernel,'symmetric');
figure,imagesc(im2);axis image;

2)使用分水岭变换分离每个blob区域
% L = watershed(im2);
L = watershed(max(im2(:))-im2);
[x,y]=find(L==0);
画出边界
figure,imagesc(im2),axis image
hold on, plot(y,x,'r.')

3) 在这里我单独分析每个 blob 并为每个 blob 找到一个 otsu 阈值,然后我检测 blob 并结合所有检测
tmp=zeros(size(imb));
for i=1:max(L(:))
ind=find(L==i);
mask=L==i;
[thr,metric] =multithresh(imb(ind),1);
if metric>0.7
tmp(ind)=imb(ind)>thr;
end
end
去除一些噪音
tmp=imopen(tmp,strel('disk',1));
figure,imagesc(tmp),axis image

如果背景具有比斑点更高的对比度,那么您不需要在分水岭变换中反转图像。