2015-05-04 27 views
4

我具有檢測白細胞細胞包含其他血細胞的圖像中的,但差異可以通過細胞的顏色區分開來,白細胞具有更緻密的紫色的顏色,可以在下面的圖像中可以看出。我應該使用HSV/HSB還是RGB?爲什麼?

我有什麼顏色梅索德使用RGB/HSV?爲什麼?!

樣本圖像:

Blood cells image

回答

12

一般。從高質量圖像開始比從低開始總是更好,並嘗試用大量處理來修復它

在這個特定情況下,我會使用HSV。但與大多數顏色分割不同,我實際上會使用飽和通道來分割圖像。單元格幾乎是相同的色相,因此使用色調通道將非常困難。

色調,(全飽和度和滿亮度)很難區分細胞

enter image description here

飽和巨大的反差

enter image description here

綠色信道,實際上示出了大量的對比度好吧(讓我吃驚)

enter image description here

紅色和藍色通道很難真正區分細胞。

現在我們有兩個候選表示飽和或綠色通道,我們問哪個更容易處理?由於任何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) 

和顯示是這樣的

enter image description here

+1

高質量的答案!工作很好。 –

+0

謝謝你的回答,這很容易理解.. 但是,你能解釋一下(:,:,1/2/3)在每個渠道嗎? 我明白這是分裂的渠道,但它是如何工作的呢? ,它會在所有與飽和度值相似的圖像示例中工作嗎?或者我有時會修改色調和亮度? 對不起,我是一個數字圖像處理初學者 – Jaja

+0

在matlab中彩色圖像通常是'MxNxL'其中'M =#行N =#列L =#顏色通道'冒號':'表示所有。所以當我分割一個圖像時,我說'rgb_image(:,:1)'這意味着'(所有行,所有列,通道#1)'對於RGB色彩空間,我們已經知道通道1 =紅色2 =綠色3 =藍色。其他顏色空間也有意義。如果你看看我的輸出圖像,每個圖像都有一個表示它所代表的數據的標題。我希望幫助 – andrew

2

在DIP和CV是這總是一個有效的問題

但它沒有統一的答案,因爲每個任務都是獨一無二所以用的是更適合它。要正確選擇你所需要知道的利弊/各的利弊所以這裏是一些總結:

  1. RGB

    這好辦,你可以easyly訪問R,G,B頻段。對於許多情況來說,最好只檢查單個樂隊而不是整個顏色,或者混合顏色來強調所需的功能,或者甚至抑制不需要的功能。由於強度直接編碼爲帶,很難比較RGB中的顏色。爲了彌補這一點,你可以使用規範化,但這是緩慢的(需要每像素sqrt)。你可以直接對RGB顏色進行運算。任務的

    實施例更適合於RGB:

  2. HSV因爲CV算法使用HSV具有非常類似的視覺感知

    更適合於顏色識別人類的感知,所以如果你想識別不同顏色的區域,HSV更好。 RGB/HSV之間的轉換需要一些時間,這可能是大分辨率或高分辨率的應用程序的問題。對於標準的DIP/CV任務通常不是這種情況。任務的

    實施例更適合於HSV:

    看一看:

    看到明顯的顏色分離我HSV。在HSV上基於顏色的圖像分割是容易的。做這樣的決定,我只是快速繪製不同的渠道和色彩空間,看看我發現,當你不能做對HSV顏色算術,而不是直接需要轉換爲RGB和背部

+0

所以他們都可以在我的情況下使用? 但我的情況HSV比RGB好,因爲我需要一個可以用人眼/感知區分的顏色識別,對嗎? – Jaja

+0

@Jaja是的,它確實如此 – Spektre

+0

不錯的總結 - 感謝分享。 –

相關問題