回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>假设我有一个二值图像,表示为<code>numpy</code>矩阵,其中一个像素是背景(0)或前景(1)。我正在寻找一种方法,删除前景中没有任何近邻的所有像素</p>
<p>假设图像矩阵为:</p>
<pre><code>a = np.array([[0,0,1,1],[1,0,0,0]])
</code></pre>
<p>单像素删除后的结果图像应为</p>
<pre><code>b = np.array([[0,0,1,1],[0,0,0,0]])
</code></pre>
<p>到目前为止,我的方法是为所有可能的方向组合开口:</p>
<pre><code>opening1 = ndi.morphology.binary_opening(edge, structure=np.array([[0,1,0],[0,1,0],[0,0,0]]))
opening2 = ndi.morphology.binary_opening(edge, structure=np.array([[0,0,0],[0,1,1],[0,0,0]]))
opening3 = ndi.morphology.binary_opening(edge, structure=np.array([[1,0,0],[0,1,0],[0,0,0]]))
opening4 = ndi.morphology.binary_opening(edge, structure=np.array([[0,0,0],[0,1,0],[0,0,1]]))
opening = opening1 + opening2 + opening3 + opening4
</code></pre>
<p>另一种方法是标记连接的组件并通过索引将其删除,但是当涉及到计算复杂性时,这些解决方案感觉是次优的</p>