我正在尝试在图像中分割细胞核,以便提取其边界。图像的核心和背景非常相似,所以我发现使用侵蚀之类的东西很难做到这一点。
如果有人能提出一种去除背景并保留核心的方法,那将非常有帮助。
图片:
我正在尝试在图像中分割细胞核,以便提取其边界。图像的核心和背景非常相似,所以我发现使用侵蚀之类的东西很难做到这一点。
如果有人能提出一种去除背景并保留核心的方法,那将非常有帮助。
图片:
您需要使用不同的色彩空间。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')