Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 我应该使用HSV/HSB还是RGB?为什么?_Image Processing_Rgb_Hsv - Fatal编程技术网

Image processing 我应该使用HSV/HSB还是RGB?为什么?

Image processing 我应该使用HSV/HSB还是RGB?为什么?,image-processing,rgb,hsv,Image Processing,Rgb,Hsv,我必须在包含另一个血细胞的图像中检测白细胞,但是可以通过细胞的颜色区分差异,白细胞有更浓的紫色,可以在下面的图像中看到 我使用RGB/HSV的颜色是什么?为什么 示例图像: 在DIP和CV中,这始终是一个有效的问题 但它没有通用的答案,因为每个任务都是独一无二的,所以请使用更适合它的任务。要正确选择,您需要知道每种方法的优缺点,因此这里有一些总结: RGB 这很容易处理,您可以轻松访问r、g、b波段。在许多情况下,最好只检查单个色带而不是整个颜色,或者混合颜色以强调想要的特征,甚至抑制不想要的特

我必须在包含另一个血细胞的图像中检测白细胞,但是可以通过细胞的颜色区分差异,白细胞有更浓的紫色,可以在下面的图像中看到

我使用RGB/HSV的颜色是什么?为什么

示例图像:


在DIP和CV中,这始终是一个有效的问题

但它没有通用的答案,因为每个任务都是独一无二的,所以请使用更适合它的任务。要正确选择,您需要知道每种方法的优缺点,因此这里有一些总结:

  • RGB

    这很容易处理,您可以轻松访问r、g、b波段。在许多情况下,最好只检查单个色带而不是整个颜色,或者混合颜色以强调想要的特征,甚至抑制不想要的特征。在RGB中比较颜色是很困难的,因为强度直接编码到波段中。为了解决这个问题,您可以使用标准化,但速度很慢(需要每像素sqrt)。您可以直接对RGB颜色进行算术运算

    更适合RGB的任务示例:

  • HSV

    更适合于颜色识别,因为使用HSV的CV算法的视觉感知与人类感知非常相似,所以如果您想识别不同颜色的区域,HSV更好。RGB/HSV之间的转换需要一点时间,这可能是大分辨率或高fps应用程序的问题。对于标准DIP/CV任务,通常情况并非如此

    更适合HSV的任务示例:

    看看:

    要查看HSV中明显的分色。基于颜色的图像分割在HSV上比较容易实现。您不能直接对HSV颜色进行算术运算,而是需要转换为RGB并返回


  • 通常在做这样的决定时,我只是快速绘制不同的通道和颜色空间,看看我发现了什么。最好从高质量的图像开始,而不是从低质量的图像开始,然后通过大量处理来修复它

    在这种情况下,我会使用HSV。但与大多数颜色分割不同,我实际上会使用饱和度通道来分割图像。单元的色调几乎相同,因此使用色调通道将非常困难

    色调(全饱和度和全亮度)很难区分细胞

    饱和大反差

    绿色通道,实际上也显示了很多对比(这让我很惊讶)

    红色和蓝色通道实际上很难区分细胞

    现在我们有了两种候选表示法,饱和或绿色通道,我们问哪个更容易使用?由于任何HSV工作都需要我们转换RGB图像,我们可以忽略它,因此明确的选择是简单地使用RGB图像的绿色通道进行分割

    编辑

    由于您没有包含语言标记,我想附上一些我刚刚编写的Matlab代码。它在所有4种颜色空间中显示图像,因此您可以快速做出使用哪种颜色的明智决定。它模仿色彩空间选择窗口

    函数视图颜色空间(rgb_图像)
    %视图颜色空间(rgb_图像)
    %在4个不同的颜色空间中显示RGB图像。RGB、HSV、YCbCr、CIELab
    %为每个颜色空间显示3个通道中的每一个
    %显示屏显示新的matlab颜色阈值窗口
    % http://www.mathworks.com/help/images/image-segmentation-using-the-color-thesholder-app.html
    hsvim=rgb2hsv(rgb_图像);
    yuvim=rgb2ycbcr(rgb_图像);
    %cielab色空间
    cform=makecform('srgb2lab');
    cieim=ApplyForm(rgb_图像,cform);
    图();
    %rgb
    子批次(3,4,1);imshow(rgb_图像(:,:,1));标题(sprintf('RGB Space\n\nred'))
    子批次(3,4,5);imshow(rgb_图像(:,:,2));标题(“绿色”)
    小批(3,4,9);imshow(rgb_图像(:,:,3));标题(“蓝色”)
    %高速列车
    子批次(3,4,2);imshow(hsvim(:,:,1));标题(sprintf('HSV Space\n\nhue'))
    子批次(3,4,6);imshow(hsvim(:,:,2));标题(“饱和度”)
    子批次(3,4,10);imshow(hsvim(:,:,3));标题(“亮度”)
    %ycbcr/yuv
    子批次(3,4,3);imshow(yuvim(:,:,1));标题(sprintf('YCbCr空格\n\n发光'))
    小批(3,4,7);imshow(yuvim(:,:,2));标题(“蓝色差异”)
    小批(3,4,11);imshow(yuvim(:,:,3));标题(“红色差异”)
    %CIElab
    子批次(3,4,4);imshow(cieim(:,:,1));标题(sprintf('CIELab Space\n\n lightness'))
    小批(3,4,8);imshow(cieim(:,:,2));标题(“绿-红”)
    小批(3,4,12);imshow(cieim(:,:,3));标题(‘黄蓝’)
    结束
    
    你可以这样称呼它

    rgbim=imread('http://i.stack.imgur.com/gd62B.jpg');
    视图颜色空间(rgbim)
    
    显示器是这样的


    那么这两种方法都可以在我的案例中使用?但就我的情况而言,HSV比RGB更好,因为我需要一种可以用人眼/感知来区分的颜色识别,对吗?@Jaja yep它确实似乎很感谢你的回答,很容易理解。。但是,你能解释一下每个频道的(:,:,1/2/3)吗?我知道这是为了分割频道,但它实际上是如何工作的?它会在所有图像示例中工作吗,类似于仅使用饱和值的图像示例?或者我有时不得不修改色调和亮度?对不起,我是数字图像处理的初学者在matlab中,彩色图像通常是
    MxNxL
    其中
    m=#行N=#列L=#彩色通道
    冒号“:`表示全部。所以当我把一个图像分割时,我说
    rgb_图像(:,:,1)
    这意味着
    (所有行,所有列,通道1)
    对于rgb颜色空间,我们已经知道通道1=红色2=绿色3=蓝色。其他颜色空间也有意义。如果查看我的输出图像,每个图像都有一个标题,表示它所代表的数据。我希望你能帮我。非常感谢你,这对我很有帮助。。。哦,是的,为什么你的示例图像变成灰度?你对那个工具有什么建议吗