为含横向不连续轮廓的3D NumPy数组分配唯一填充值
问题:为3D二进制轮廓数组中的独立物体分配唯一标签
我有一个以x、y、深度为维度的3D NumPy二进制数组,所有物体都被标记为1,但实际对应不同的独立物体。我已经提取了每个物体的轮廓,目标是为每个轮廓包围的区域分配唯一值。
2D模拟示例(含横向不连续轮廓)
以下是模拟真实数据的2D二进制轮廓数组:
contour_array = np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,1,1,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0,0,0,0,0,0], [1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,1,1,1,1,1,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0]])
该数组的matplotlib可视化图:(图中可见多条横向不连续的白色轮廓线条,分布在不同行)
预期输出
处理后的标签数组如下:
mask_array = np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,1,1,1,1,1,1,1,1], [1,1,1,1,1,1,1,1,1,1,1,1,1], [2,2,2,2,2,1,1,1,1,1,1,1,1], [2,2,2,2,2,2,1,1,1,1,1,1,1], [2,2,2,2,2,1,1,1,1,1,1,1,1], [2,2,2,2,1,1,1,1,1,1,1,1,1], [1,1,1,1,1,1,1,1,1,1,1,1,1], [3,3,3,3,3,3,3,3,3,3,3,3,3], [3,3,3,3,3,3,3,3,3,3,3,3,3], [3,3,3,3,3,3,3,3,3,3,3,3,3]])
预期输出的matplotlib可视化图:(图中可见4个被唯一标签填充的独立区域,标签2嵌入在标签1内部,标签1遇到标签3后终止,边界值与下方填充值一致)
从示例中可见,共有4个需要标记的独立物体,标签2嵌入标签1且在x方向横向不连续,标签1遇到标签3时终止。
补充说明
边界值需与下方填充值一致,参考mask数组可视化图。实际提取的2D二进制轮廓数组在x空间并非始终连续。
已尝试的方案
首次尝试
遍历每一列数据,使用.cumsum()生成唯一值,再用push()向下前向填充。代码如下:
# create an empty array for the labels mask_array = np.zeros_like(contour_array) # determine shape of data for iteration xx, yy, d = contour_array.shape # loop through 3d array for x in range(xx): for y in range(yy): # apply cumsum() to assign unique values to each object mask_array[x,y,:] = contour_array[x,y,:].cumsum()*contour_array[x,y,:] # replace zeros with nulls for for forward fill mask_array[x,y,:] = np.where(mask_array[x,y,:] == 0, np.nan, mask_array[x,y,:]) # apply push to each column to create labels mask_array[x,y,:] = push(mask_array[x,y,:]) # fill remaining nulls with 0 mask_array[np.isnan(mask_array)] = 0.0
该方法运行较慢,且仅适用于x空间连续的物体/图层;由于数据横向不连续,输出结果零散,无法区分嵌入物体与连续图层。
第二次尝试
结合numpy sliding_window_view()使用移动窗口捕捉横向变化,但未能成功运行,代码效果不佳。
最后尝试
研究使用cv2.fillPoly(),但不确定是否适用。
内容的提问来源于stack exchange,提问作者Mike McIntire
相关产品推荐
相关产品推荐

