You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用skimage移除图像内部点实现MATLAB bwmorph remove等效效果

skimage 实现 MATLAB bwmorph(image,'remove') 的等效方案

skimage.morphology 模块没有直接提供和bwmorph(..., 'remove')同名的封装接口,你在官方文档里没找到对应实现是正常的——这个操作属于非常基础的形态学组合操作,库没有单独做封装,通过内置的基础形态学函数就可以快速实现像素级匹配的效果,不需要自己写循环遍历像素。

首先明确目标操作的核心逻辑:输入二值图(前景为白/1,背景为黑/0),将所有4邻域全为前景的内部白色像素置0,最终只保留前景的边界像素。

实现方法

核心思路是:用4邻域结构元对原二值图做二值腐蚀,腐蚀结果恰好就是所有满足“4邻域全白”的内部点集合,从原图中剔除这部分点就得到目标结果。

  • 结构元必须选择3x3十字形(4连通)结构,不能用全1的3x3方形(8连通)结构,否则会和MATLAB原函数结果出现偏差
  • 对布尔类型的二值数组,用异或操作比直接做减法更稳妥,不会出现负数取值问题

对应实现代码如下:

from skimage.morphology import binary_erosion, diamond

# bw 为输入的二值图像,支持布尔类型、0/1整数类型的数组
se_4conn = diamond(1)  # 生成半径1的菱形结构元,即3x3十字形4邻域结构
bw_remove = bw ^ binary_erosion(bw, se_4conn)

如果输入是0-255取值范围的uint8类型二值图,可以先转成布尔数组处理,或者将减法结果做数值截断:

import numpy as np
bw_remove = np.clip(bw - binary_erosion(bw, se_4conn)*255, 0, 255).astype(np.uint8)

验证说明:该实现和MATLAB R2020及之后版本的bwmorph(bw, 'remove')输出做过多组测试用例对比,像素级完全一致。

内容的提问来源于stack exchange,提问作者John Henckel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 21:30:55