我具有检测白细胞细胞包含其他血细胞的图像中的,但差异可以通过细胞的颜色区分开来,白细胞具有更致密的紫色的颜色,可以在下面的图像中可以看出。我应该使用HSV/HSB还是RGB?为什么?
我有什么颜色梅索德使用RGB/HSV?为什么?!
样本图像:
我具有检测白细胞细胞包含其他血细胞的图像中的,但差异可以通过细胞的颜色区分开来,白细胞具有更致密的紫色的颜色,可以在下面的图像中可以看出。我应该使用HSV/HSB还是RGB?为什么?
我有什么颜色梅索德使用RGB/HSV?为什么?!
样本图像:
一般。从高质量图像开始比从低开始总是更好,并尝试用大量处理来修复它
在这个特定情况下,我会使用HSV。但与大多数颜色分割不同,我实际上会使用饱和通道来分割图像。单元格几乎是相同的色相,因此使用色调通道将非常困难。
色调,(全饱和度和满亮度)很难区分细胞
饱和巨大的反差
绿色信道,实际上示出了大量的对比度好吧(让我吃惊)
红色和蓝色通道很难真正区分细胞。
现在我们有两个候选表示饱和或绿色通道,我们问哪个更容易处理?由于任何HSV工作都涉及我们转换RGB图像,所以我们可以忽略它,所以明确的选择是简单地使用RGB图像的绿色通道进行分割。
编辑
,因为你不包括语言标签,我想附加一些Matlab代码我只是写。它在所有4个色彩空间中显示图像,因此您可以快速做出明智的决定,以便使用哪个。它模仿matlabs Color Thresholder色彩空间选择窗口
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)
和显示是这样的
在DIP和CV是这总是一个有效的问题
但它没有统一的答案,因为每个任务都是独一无二所以用的是更适合它。要正确选择你所需要知道的利弊/各的利弊所以这里是一些总结:
RGB
这好办,你可以easyly访问R,G,B频段。对于许多情况来说,最好只检查单个乐队而不是整个颜色,或者混合颜色来强调所需的功能,或者甚至抑制不需要的功能。由于强度直接编码为带,很难比较RGB中的颜色。为了弥补这一点,你可以使用规范化,但这是缓慢的(需要每像素sqrt)。你可以直接对RGB颜色进行运算。任务的
实施例更适合于RGB:
HSV因为CV算法使用HSV具有非常类似的视觉感知
更适合于颜色识别人类的感知,所以如果你想识别不同颜色的区域,HSV更好。 RGB/HSV之间的转换需要一些时间,这可能是大分辨率或高分辨率的应用程序的问题。对于标准的DIP/CV任务通常不是这种情况。任务的
实施例更适合于HSV:
看一看:
看到明显的颜色分离我HSV。在HSV上基于颜色的图像分割是容易的。做这样的决定,我只是快速绘制不同的渠道和色彩空间,看看我发现,当你不能做对HSV颜色算术,而不是直接需要转换为RGB和背部
高质量的答案!工作很好。 –
谢谢你的回答,这很容易理解.. 但是,你能解释一下(:,:,1/2/3)在每个渠道吗? 我明白这是分裂的渠道,但它是如何工作的呢? ,它会在所有与饱和度值相似的图像示例中工作吗?或者我有时会修改色调和亮度? 对不起,我是一个数字图像处理初学者 – Jaja
在matlab中彩色图像通常是'MxNxL'其中'M =#行N =#列L =#颜色通道'冒号':'表示所有。所以当我分割一个图像时,我说'rgb_image(:,:1)'这意味着'(所有行,所有列,通道#1)'对于RGB色彩空间,我们已经知道通道1 =红色2 =绿色3 =蓝色。其他颜色空间也有意义。如果你看看我的输出图像,每个图像都有一个表示它所代表的数据的标题。我希望帮助 – andrew