二值化灰度图像包含了太多的噪音

时间:2019-02-02 18:28:00

标签: image matlab image-processing grayscale hsv

我目前有这样的数字病理图像:

enter image description here

首先,我使用以下代码转图像为灰度:

img=imread('DigitalPathology8.png');
figure;
imshow(img)
hsv=rgb2hsv(img); 
s=hsv(:,:,2); 

我得到了这张灰度图像: enter image description here

虽然我尝试使用以下代码对这张灰度图像进行二值化处理:

bw = imbinarize(s,'global'); 
figure
subplot(2,1,1)
imshow(s)
subplot(2,1,2)
imshow(bw)

我得到这样的图像: enter image description here 这有什么错我的代码?当我将相同的算法应用于其他图像时,如下所示: enter image description here 我能得到二值图像只蓝色细胞是白色和其他细胞,包括背景是黑色的。所以,我也希望我将相同的代码,以我提到的第一个图像后,同样的结果。 有人可以帮我吗? enter image description here

1 个答案:

答案 0 :(得分:1)

您最好使用rgb2gray() (look here)进行转换:

grey=rgb2gray(img)

这应该给你这样的东西:

Image converted to grayscale

我建议您使用更复杂的方法,例如Otsu,而不是使用全局阈值,这样会为您带来更好的结果:

Thresholded image

但是,如果您只想提取蓝色单元而不是图像的简单阈值版本,则应该在灰度图像上使用完全不同的方法,例如MaxEntropy。这会给你这样的东西:

First image thresholded

还有这个

Second image thresholded

此tresholding方法似乎未包含在matlab中,而是plugin can be found

您还可以尝试使用一种完全不同的方法,根据color similarity通过阈值检测蓝点: 使用这种方法,您可以将每个像素设置为白色,该像素与蓝色的颜色距离小于给定的阈值。这应该给你这样的东西(红色标记代表图像的前景):

参考颜色:Image of the reference color

Thresholding by color distance

对于这种方法,我将RGB颜色(17.3、32.5、54.5)作为参考颜色,我的最大距离是210。如果您有ImageJ,则可以交互操作此方法,前一阵子我写了plugin for that如您所见,这种方法还可以检测到错误的像元,这是由距离的高值和选择的参考色引起的。通过选择更合适的参考颜色和更小的距离值,可以最大程度地减少此错误。