Matlab - 从相似背景分割细胞核

信息处理 matlab 图像处理 图像分割
2022-02-21 04:13:20

我正在尝试在图像中分割细胞核,以便提取其边界。图像的核心和背景非常相似,所以我发现使用侵蚀之类的东西很难做到这一点。

如果有人能提出一种去除背景并保留核心的方法,那将非常有帮助。

图片:

细胞核

2个回答

您需要使用不同的色彩空间。YCbCr例如尝试

oimg = imread('http://i.stack.imgur.com/aYhrS.png');
img = rgb2ycbcr(oimg); % conver RGB to YCbCr color space
msk = img(:,:,3)>130;  % apply threshold on Cr channel to get segmentation mask

我选择了 130 作为任意阈值,您可能需要稍微调整一下。
显示输入图像、图像区域msk==1和背景: 在此处输入图像描述

我将把它留给您作为练习,以思考为什么该Cr频道在这张图片上表现良好。

您遇到困难的原因是因为您正在进行黑白转换,而这一步是“丢弃”您最好的差异化功能。尝试在非 bw 颜色空间中进行分割。使用 k-means 聚类可以很容易地完成分割:

img = imread('http://i.stack.imgur.com/aYhrS.png');
imshow(img)

cform = makecform('srgb2lab');
lab_he = applycform(img,cform);

% classify the colors in 'a*b*' Space Using k-means clustering
ab = double(lab_he(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);

% Looks like there are ~3 colors in the image
nColors = 3;

% repeat the clustering 3 times to avoid local minima
[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...
                                  'Replicates',3);

pixel_labels = reshape(cluster_idx,nrows,ncols);

% nucleus is in the center. figure out what its label is.
middleX = round(size(img,2)/2);
middleY = round(size(img,1)/2);

nucleusLabel = pixel_labels(middleX,middleY);

figure
tempImg = bsxfun(@eq,pixel_labels,nucleusLabel);
tempImg = bsxfun(@times,double(tempImg),double(img));

imshowpair(img,tempImg/max(tempImg2(:)),'montage')