由于感兴趣的细胞看起来非常圆形,因此您可以在Lab颜色空间中使用imfindcircles,这比使用细胞H&E染色的〜紫色颜色的RGB空间更适合使用.
所以基本上转换颜色空间,然后在第3个通道上应用一个阈值,其中大单元格最亮,然后应用imfindcircles.请注意,此处Edge属性必须非常低才能区分彼此靠近的单元格(如图像的左下角).此外,我的Matlab版本不支持rgb2lab所以我使用makecform在颜色空间之间进行转换.
以下是Lab色彩空间中图像的3个通道的外观:

如你所见,第三通道中具有大核的大细胞看起来最亮.因此,我们将仅针对其余部分阈值此阈值.
为了获得检测到的细胞数,只需询问radii函数imfindcircles(numel(radii))给出的数量.
clear
clc
close all
Im = imread('Cells.jpg');
%// Transform to Lab color space
cform = makecform('srgb2lab');
Im_lab = applycform(Im,cform);
%// Apply threshold
Im_lab = im2bw(Im_lab(:,:,3),.35);
%// Detect ~circles
[centers, radii] = imfindcircles(Im_lab,[12 35],'Sensitivity',0.7,'Edge',0.1,'ObjectPolarity','dark');
imshow(Im);
hold on
viscircles(centers, radii,'EdgeColor','k','LineWidth',4);
NumCircles = numel(radii);
%// Display message box
Msg = sprintf('You have just found %i circles!!!\n',NumCircles);
msgbox(Msg)
Run Code Online (Sandbox Code Playgroud)
输出:
