我目前有这样的数字病理图像:
首先,我使用以下代码转图像为灰度:
img=imread('DigitalPathology8.png');
figure;
imshow(img)
hsv=rgb2hsv(img);
s=hsv(:,:,2);
虽然我尝试使用以下代码对这张灰度图像进行二值化处理:
bw = imbinarize(s,'global');
figure
subplot(2,1,1)
imshow(s)
subplot(2,1,2)
imshow(bw)
我得到这样的图像: 这有什么错我的代码?当我将相同的算法应用于其他图像时,如下所示: 我能得到二值图像只蓝色细胞是白色和其他细胞,包括背景是黑色的。所以,我也希望我将相同的代码,以我提到的第一个图像后,同样的结果。 有人可以帮我吗?
答案 0 :(得分:1)
您最好使用rgb2gray()
(look here)进行转换:
grey=rgb2gray(img)
这应该给你这样的东西:
我建议您使用更复杂的方法,例如Otsu,而不是使用全局阈值,这样会为您带来更好的结果:
但是,如果您只想提取蓝色单元而不是图像的简单阈值版本,则应该在灰度图像上使用完全不同的方法,例如MaxEntropy。这会给你这样的东西:
还有这个
此tresholding方法似乎未包含在matlab中,而是plugin can be found。
您还可以尝试使用一种完全不同的方法,根据color similarity通过阈值检测蓝点: 使用这种方法,您可以将每个像素设置为白色,该像素与蓝色的颜色距离小于给定的阈值。这应该给你这样的东西(红色标记代表图像的前景):
对于这种方法,我将RGB颜色(17.3、32.5、54.5)作为参考颜色,我的最大距离是210。如果您有ImageJ,则可以交互操作此方法,前一阵子我写了plugin for that如您所见,这种方法还可以检测到错误的像元,这是由距离的高值和选择的参考色引起的。通过选择更合适的参考颜色和更小的距离值,可以最大程度地减少此错误。