Документация Engee
Notebook

RGB в HSV и пороговая обработка

Открыть пример в Engee

Этот пример иллюстрирует, как преобразование RGB в HSV и использование данного представления помогает упростить процессы сегментации.

Реализация данной функции начинается с подключения библиотек.

In [ ]:
using Images, TestImages, LinearAlgebra

Загрузим тестовое изображение.

In [ ]:
rgb_img = testimage("lighthouse")
Out[0]:
No description has been provided for this image

HSV (англ. Hue, Saturation, Value – тон, насыщенность, значение) – цветовая модель, в которой координатами цвета являются:

  1. Hue – цветовой тон, например, красный, зелёный или синий;
  2. Saturation – насыщенность, и чем больше этот параметр, тем «чище» цвет;
  3. Value – значение цвета.

Приведём исходное изображение RGB к представлению HSV.

In [ ]:
hsv_img = HSV.(rgb_img);

Выделим каналы изображения HSV.

In [ ]:
channels = channelview(float.(hsv_img));

hue_img = channels[1,:,:];
value_img = channels[3,:,:];
saturation_img = channels[2,:,:];

Затем можно эффективно выполнить простую сегментацию изображения путем определения порога каналов HSV.

In [ ]:
mask = zeros(size(hue_img))
h, s, v = 80, 150, 150
for ind in eachindex(hue_img)
    if hue_img[ind] <= h && saturation_img[ind] <= s/255 && value_img[ind] <= v/255
        mask[ind] = 1
    end
end
binary_img = colorview(Gray, mask)
Out[0]:
No description has been provided for this image

Полученное бинарное изображение можно использовать в качестве маски для исходного изображения RGB.

In [ ]:
segmented_img = mask .* rgb_img
hcat(rgb_img, binary_img, segmented_img)
Out[0]:
No description has been provided for this image

Вывод

В данной демонстрации мы разобрали преобразование RGB в HSV и использование данного представления для облегчения процессов сегментации изображения.