我想移除面积小于阈值的孤岛。岛定义为4个连接。
例如,当输入数组为
import matplotlib.pyplot as plt
import numpy as np
array = np.array(
[[1, 1, 1, 1, 0, 1, 1, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 1, 1, 0, 1],
[0, 1, 1, 1, 0, 0, 0, 0, 1, 1],
[1, 1, 0, 1, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 1, 0, 1, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 1, 1, 1, 0],
[1, 1, 1, 1, 0, 1, 1, 0, 1, 1],
[1, 0, 1, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 1, 0, 1, 0, 1]])
plt.matshow(array)
并且阈值为5
,将岛小于5的单元值设置为0
。预期的数组如下所示。
expected = np.array(
[[1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 1, 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],
[0, 0, 0, 0, 0, 0, 1, 1, 1, 0],
[1, 1, 1, 1, 0, 1, 1, 0, 1, 1],
[1, 0, 1, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 1, 0, 1]])
plt.matshow(expected)
2条答案
按热度按时间0h4hbjxa1#
我可以实现这个功能。
cyej8jka2#
可以使用scipy.ndimage.label生成标签要素数组。然后计算特征的数量,如果它小于阈值,将值更改为0:
结果: