我具有檢測白細胞細胞包含其他血細胞的圖像中的,但差異可以通過細胞的顏色區分開來,白細胞具有更緻密的紫色的顏色,可以在下面的圖像中可以看出。我應該使用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