2015-04-25 7 views
1

Я хочу сегментировать пиксели изображения в растительность и растительность. Для этого алгоритма выделения избыточного зеленого цвета разработан алгоритм. Ниже приведен алгоритм.чрезмерная реализация выделения из зеленого цвета

Outimage (х, у, г) = inimage (х, у, г)

если {inimage (х, у, г) < (х, у, г) inimage (х, у, б) < (х, у, г)}

outimage (х, у, г) = 0 в противном случае *

где outimage (х, у, г) выходное изображение после чрезмерного зеленой сегментации сохраняется в JPG формат, inimage (x, y, z) - это изображение, полученное камерой, x - это отсутствие пикселей в каждой строке, y - отсутствие пикселей в каждом столбце, а z - основная плоскость цвета для красного, z равно до 1, для зеленого z - 2, а для синего z - 3.

Я не понимаю, как это реализовать, поэтому, пожалуйста, помогите мне реализовать его. Или просто дайте приблизительную идею или предложение, как я могу ее реализовать.

входное изображение:

input image

выход:

я хочу выход быть в этом формате после применения выше алгоритм

+2

У вас есть описание алгоритма в ваш вопрос: это синтаксис Matlab, в котором вам нужна помощь? Пожалуйста, уточните ваш запрос. – MattG

+3

Вы можете записывать инфракрасный канал? Это, как правило, хороший дискриминант для растительности - попробуйте Googling 'NDVI' или * Нормализованный разностный индекс растительности *. –

+0

@MattG да, это синтаксис matlab, мне нужна помощь. –

ответ

4

Построить 2D маску и затем используйте bsxfun, чтобы применить его ко всем компонентам цвета (третий -dim ломтики):

inimage = imread('filename'); %// type uint8 
mask = inimage(:,:,1)<inimage(:,:,2) & inimage(:,:,3)<inimage(:,:,2); %// 2D mask 
outimage = bsxfun(@times, inimage, uint8(mask)); %// apply mask replicated along 3rd dim 

enter image description here

+0

mask = inimage (:,:, 1)

+0

Да, 'inimage (:,:, 1)' является R-компонентой, 2 является G, 3 является B –

1

Альтернативным решением является преобразование изображения в HSV colorspace, если вы не знакомы с ним, он преобразует значения RGB в Хюэ (цвет), насыщенность (как яркий цвет), ~ яркость (уровень освещенности). Самое приятное в том, что вы можете искать один и тот же цвет во всех условиях освещения.

Другие, чем, как мы получаем нашу маску (с использованием зеленых оттенков), это точно такой же процесс, как вариант RGB принял

inimage = imread('plants.png'); 
hsv_im = rgb2hsv(inimage); 

%plots only the hues so we can get an idea of what to segment out 
hue_channel = 1; 
figure(1) 
imshow(hsv_im(:,:,hue_channel)); %displays only the hue channel/layer 
colormap(hsv)   %uses the hue colormap 
colorbar     %displays the colorbar 

%masks the greenish regions (this is subjective) 
mask = hsv_im(:,:,hue_channel) < 0.5 & hsv_im(:,:,hue_channel) > 0.2; 

%applies the mask to all 3 color layers 
outimage = bsxfun(@times, inimage, uint8(mask)); 
figure(2) 
subplot(1,2,1);imshow(inimage);title('original image') 
subplot(1,2,2),imshow(outimage);title('segmented image') 

enter image description here enter image description here

Смежные вопросы