使用map函数将每个像素的块号替换为块的平均颜色值:
imshow(map(i->segment_mean(segments,i), labels_map(segments)))
这将导致图像包含两种颜色,绿色代表草,另一种代表猫。由于图像相对简单并且可以轻松分离猫,因此结果的质量很高:
尽管该方法涉及手动工作,但在为神经网络执行的图像分割任务准备训练数据集时,它可能很方便。
识别复杂对象
尝试分离或分割无法轻易与背景分离或由多个部分组成的对象。尝试使用一张鸟的图像:
运行上一节中的代码,看看它是否需要任何改进:
using Images, ImageView, ImageSegmentation
img = load(“bird-3183441_640.jpg”);
seeds = [
(CartesianIndex(220,250), 1), # apprx. object location
(CartesianIndex(220,500), 2) # background location
]
segments = seeded_region_growing(img, seeds)
imshow(map(i->segment_mean(segments,i), labels_map(segments)))
从下面的图像中,可以看出它的最终效果与猫的图像不同。分割过程无法完全分离对象:
复杂之处在于,鸟由多种颜色组成,其中有些与背景相似。尝试定义更多的分割,看看是否可以改善结果。与上一节相同,将鼠标悬停在图像的不同区域上并记下坐标:
img = load(“bird-3183441_640.jpg”);
seeds = [
(CartesianIndex(240,120), 1),
(CartesianIndex(295,70), 2),
(CartesianIndex(319,40), 3),
(CartesianIndex(90,30