2015-05-04 9 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 COLORSPACE

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 = # rows N = # columns L = # color channels' Двоеточие ':' означает все. Поэтому, когда я разбиваю изображение, я говорю: rgb_image (:,:, 1) 'this означает' (все строки, все столбцы, канал # 1) 'Для цветового пространства RGB мы уже знаем канал 1 = красный 2 = зеленый 3 = синий. Другие цветовые пространства тоже имеют смысл. Если вы посмотрите на мое выходное изображение, каждое изображение имеет название для того, какие данные он представляет. Надеюсь, что поможет – andrew

2

в DIP и CV это всегда правильный вопрос

Но это не имеет универсального ответа, поскольку каждая задача уникальна, так что используйте то, что лучше подходит для Это. Чтобы правильно выбрать вам нужно знать плюсы/минусы каждого из них, так вот некоторые резюме:

  1. RGB

    это простой в обращении и вы можете easyly доступа г, г, б полосы. Для многих случаев лучше проверить только одну полосу вместо целого цвета или смешать цвета, чтобы подчеркнуть желаемую функцию или даже увлажнить нежелательный. Трудно сравнивать цвета в RGB из-за интенсивности, закодированной в полосах напрямую. Чтобы исправить это, вы можете использовать нормализацию, но это медленно (требуется на пиксель sqrt). Вы можете напрямую использовать арифметику на цветах RGB.

    Пример задачи лучше всего подходит для RGB:

  2. HSV

    лучше подходит для распознавания цвета, поскольку алгоритмы CV с помощью HSV имеет очень похожий на зрительное восприятие к человеческое восприятие, поэтому, если вы хотите лучше распознать области различных цветов HSV. Преобразование между RGB/HSV занимает немного времени, что может быть связано с большими разрешениями или приложениями hi fps. Для стандартных задач DIP/CV это обычно не так.

    Пример задачи лучше всего подходит для HSV:

    Взгляните:

    , чтобы увидеть четкое разделение цвета я n HSV. Сегментация изображения на основе цвета проста в HSV. Вы не можете сделать арифметик на HSV цветов напрямую, а нужно преобразовать в RGB и обратно

+0

так как они могут быть использованы в моем случае? , но HSV лучше, чем RGB для моего случая, потому что мне нужно распознавание цвета, которое можно отличить человеческими глазами/восприятием, правильно? – Jaja

+0

@Jaja да, похоже, это так – Spektre

+0

Хорошее резюме - спасибо за обмен. –