图像分割 — 将包含布尔值的分割结果快速替换为像素值
实例分割任务是目标检测任务和语义分割任务的结合,需要同时完成实例级和像素级的预测,既要区分视频中不同的目标个体,又要目标轮廓进行精细分割,是一个复杂且有挑战性的任务。
通过实例分割得到的输出结果,包含图像中像素是否属于目标的一个矩阵,该mask是由一个二维的布尔型数组组成,如下所示。
其中,False 表示背景像素,True 表示目标像素。
我们考虑把这个布尔型数组变成灰度图,将 False 修改为255,作为黑色背景;将True 修改为0,作为白色目标。结果如下所示。
那么,问题来了,如何操作呢?
方法一
使用 for 循环,思路清晰,简单暴力!
for x in range(len(mask[0])):
for y in range(len(mask[1]):
if mask[x, y] == False:
np_img[x, y] = 0
else:
np_img[x, y] = 255
此方法可以实现目标,但是速度非常慢,经测验在1080*720的数组上,运行速度为0.9s。
方法二
使用数学运算符直接实现,非常简单,一行代码即可实现!
mask = np.uint8(mask*255)
其中,True × 255 = 255, False × 255 = 0
如果 True 和 False 是反着的,只需使用逻辑非运算符,将 True 和 False 取反即可!
mask = ~mask
mask = np.uint8(mask*255)
此方法可以实现目标,并且速度非常快,经测验在1080*720的数组上,运行速度为0.002s。
方法二比方法一的速度快450倍,非常方便!
日常学习记录,一起交流讨论吧!侵权联系~