我需要在一个含有其他血细胞的图像中检测白细胞,但是通过细胞的颜色可以区分它们之间的差异,白细胞具有更密集的紫色,可以在下面的图像中看到。
我应该使用什么颜色方法,RGB / HSV?为什么?!
示例图像:
我需要在一个含有其他血细胞的图像中检测白细胞,但是通过细胞的颜色可以区分它们之间的差异,白细胞具有更密集的紫色,可以在下面的图像中看到。
我应该使用什么颜色方法,RGB / HSV?为什么?!
示例图像:
饱和度巨大的对比度
绿色通道实际上也显示了很多对比度(这让我感到惊讶)
function ViewColorSpaces(rgb_image)
% ViewColorSpaces(rgb_image)
% displays an RGB image in 4 different color spaces. RGB, HSV, YCbCr,CIELab
% each of the 3 channels are shown for each colorspace
% the display mimcs the New matlab color thresholder window
% http://www.mathworks.com/help/images/image-segmentation-using-the-color-thesholder-app.html
hsvim = rgb2hsv(rgb_image);
yuvim = rgb2ycbcr(rgb_image);
%cielab colorspace
cform = makecform('srgb2lab');
cieim = applycform(rgb_image,cform);
figure();
%rgb
subplot(3,4,1);imshow(rgb_image(:,:,1));title(sprintf('RGB Space\n\nred'))
subplot(3,4,5);imshow(rgb_image(:,:,2));title('green')
subplot(3,4,9);imshow(rgb_image(:,:,3));title('blue')
%hsv
subplot(3,4,2);imshow(hsvim(:,:,1));title(sprintf('HSV Space\n\nhue'))
subplot(3,4,6);imshow(hsvim(:,:,2));title('saturation')
subplot(3,4,10);imshow(hsvim(:,:,3));title('brightness')
%ycbcr / yuv
subplot(3,4,3);imshow(yuvim(:,:,1));title(sprintf('YCbCr Space\n\nLuminance'))
subplot(3,4,7);imshow(yuvim(:,:,2));title('blue difference')
subplot(3,4,11);imshow(yuvim(:,:,3));title('red difference')
%CIElab
subplot(3,4,4);imshow(cieim(:,:,1));title(sprintf('CIELab Space\n\nLightness'))
subplot(3,4,8);imshow(cieim(:,:,2));title('green red')
subplot(3,4,12);imshow(cieim(:,:,3));title('yellow blue')
end
你可以这样调用它
rgbim = imread('http://i.stack.imgur.com/gd62B.jpg');
ViewColorSpaces(rgbim)
而显示结果是这样的
在数字图像处理和计算机视觉中,这总是一个有效的问题
但它没有普遍的答案,因为每个任务都是独特的,所以使用更适合它的工具。要正确选择,您需要了解每种方法的优缺点,以下是一些摘要:
RGB
易于处理,可以轻松访问r,g,b通道。对于许多情况来说,仅检查单个通道而不是整个颜色或混合颜色以强调所需功能甚至减弱不需要的功能更好。由于亮度直接编码到通道中,因此很难比较RGB颜色。为了解决这个问题,您可以使用标准化,但这很慢(需要每像素sqrt)。您可以直接对RGB颜色进行算术运算。
适合使用RGB的示例:
HSV
更适用于颜色识别,因为使用HSV的CV算法与人类视觉感知非常相似,因此如果想要识别具有不同颜色区域,则HSV更好。 RGB / HSV之间的转换需要一些时间,这可能对于大分辨率或高fps应用程序是问题。对于标准的数字图像处理和计算机视觉任务,通常不会出现此情况。
适合使用HSV的示例:
请参见:
以查看HSV中的明显颜色分离。基于颜色的图像分割在HSV上很容易。您不能直接对HSV颜色进行算术运算,而是需要先将其转换为RGB,然后再转回。
MxNxL
的格式,其中M=#行 N=#列 L=#颜色通道
。冒号:
表示所有。因此,当我拆分一幅图像时,我会说rgb_image(:,:,1)
,这意味着(所有行,所有列,第1个通道)。对于RGB颜色空间,我们已经知道通道1=红色,2=绿色,3=蓝色。其他颜色空间也有它们各自的含义。如果您查看我的输出图像,每个图像都有一个标题,说明它所代表的数据。希望这能帮到您。 - andrew