Engee 文档
Notebook

HSV和阈值处理中的RGB

此示例说明如何将RGB转换为HSV并使用此表示有助于简化分割过程。

此功能的实现始于库的连接。

In [ ]:
Pkg.add(["LinearAlgebra", "TestImages"])
In [ ]:
using Images, TestImages, LinearAlgebra

让我们上传一个测试图像。

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

HSV(英文Hue,Saturation,Value–tone,saturation,value)是一种颜色模型,其中颜色坐标为:

  1. 色调-一种色调,例如红色、绿色或蓝色;
  2. 饱和度-饱和度,该参数越高,颜色越"干净"。;
  3. 值-颜色值。

让我们将原始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的转换以及使用该表示来促进图像分割过程。