HSV和阈值处理中的RGB
此示例说明如何将RGB转换为HSV并使用此表示有助于简化分割过程。
此功能的实现始于库的连接。
In [ ]:
Pkg.add(["LinearAlgebra", "TestImages"])
In [ ]:
using Images, TestImages, LinearAlgebra
让我们上传一个测试图像。
In [ ]:
rgb_img = testimage("lighthouse")
Out[0]:
HSV(英文Hue,Saturation,Value–tone,saturation,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]:
得到的二值图像可以用作原始RGB图像的掩模。
In [ ]:
segmented_img = mask .* rgb_img
hcat(rgb_img, binary_img, segmented_img)
Out[0]:
结论
在本演示中,我们分析了RGB到HSV的转换以及使用该表示来促进图像分割过程。


