我对细胞或镶嵌或其他什么一无所知。但如果你想检测非均匀背景中的那些斑点,那么我可能会有所帮助。由于背景不均匀,您需要单独分析斑点。您不能仅设置固定阈值来一次检测所有斑点。首先,您将单独检测每个斑点,然后使用单独的阈值。这是例子
原始图像
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)在这里,我单独分析每个斑点并找到一个大津阈值
每个斑点,然后我检测斑点并合并所有检测
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
如果背景的对比度高于斑点,则无需在分水岭变换中反转图像。