Обычно при принятии решений, как это я просто быстро Заговором различных каналов и цветовых пространств и посмотреть, что я нахожу.Всегда лучше начинать с изображения высокого качества, чем начинать с низкого, и попытаться исправить его с большим количеством обработки.
В этом конкретном случае я бы использовал HSV. Но, в отличие от большинства сегментов цвета, я бы использовал канал насыщения для сегментирования изображений. Ячейки почти одинаковы с оттенком, поэтому использование тонкого канала будет очень сложно.
оттенок (при полном насыщении и полной яркости) очень трудно дифференцировать ячеек
![enter image description here](https://i.stack.imgur.com/r6kUX.png)
насыщения огромный контраст
![enter image description here](https://i.stack.imgur.com/3GmNl.png)
Зеленый канал, фактически показывает много контраста как хорошо (это меня удивило)
![enter image description here](https://i.stack.imgur.com/ERZmH.png)
Красный и синий каналы трудно отличить ячейки.
Теперь, когда у нас есть два представления кандидата насыщения или зеленый канал, мы спрашиваем, с чем легче работать? Поскольку любая работа 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](https://i.stack.imgur.com/2W5mW.jpg)
Ответ высшего качества !!! Хорошая работа. –
Благодарим вас за ответ, который легко понять .. но, не могли бы вы объяснить, что (:,,, 1/2/3) в каждом канале? Я понимаю, что это для разделения канала, но как это работает на самом деле? и будет ли он работать во всех примерах изображений, похожих на тот, который имеет только значение насыщения? или я должен иногда изменять оттенок и яркость? извините, что я новичок в цифровой обработке изображений – Jaja
в matlab цветное изображение обычно 'MxNxL', где' M = # rows N = # columns L = # color channels' Двоеточие ':' означает все. Поэтому, когда я разбиваю изображение, я говорю: rgb_image (:,:, 1) 'this означает' (все строки, все столбцы, канал # 1) 'Для цветового пространства RGB мы уже знаем канал 1 = красный 2 = зеленый 3 = синий. Другие цветовые пространства тоже имеют смысл. Если вы посмотрите на мое выходное изображение, каждое изображение имеет название для того, какие данные он представляет. Надеюсь, что поможет – andrew