CBIS-DDSM乳腺钼靶图像去除胸肌后仅保留乳腺区域的裁剪方法咨询
裁剪逻辑优化方案
核心思路
原有代码会将所有非零像素纳入裁剪范围,左上角的零星残留噪点会直接拉高裁剪边界,最终保留多余区域。正确逻辑是先过滤无效小区域,仅保留乳腺对应的主连通域后再执行裁剪。
实现代码
依赖scikit-image库做连通域分析,你也可以替换为OpenCV的connectedComponentsWithStats接口实现相同逻辑:
import numpy as np from skimage.measure import label, regionprops from skimage.morphology import opening, square def crop_breast_region(image, min_area_ratio=0.01, morph_open_size=3): # 生成非零像素二值掩码 binary_mask = (image > 0).astype(np.uint8) # 可选:形态学开运算,提前去除微小噪点 if morph_open_size > 0: binary_mask = opening(binary_mask, square(morph_open_size)) # 标记所有连通域 labeled_mask = label(binary_mask) regions = regionprops(labeled_mask) # 处理无有效区域的极端情况 if not regions: return image # 按连通域面积降序排序,取最大的主区域(乳腺) regions.sort(key=lambda x: x.area, reverse=True) max_area = regions[0].area # 过滤面积小于阈值的无效残留,可根据实际残留大小调整比例 valid_regions = [r for r in regions if r.area >= max_area * min_area_ratio] # 计算所有有效区域的合并外接矩形 min_row = min(r.bbox[0] for r in valid_regions) max_row = max(r.bbox[2] for r in valid_regions) min_col = min(r.bbox[1] for r in valid_regions) max_col = max(r.bbox[3] for r in valid_regions) # 执行裁剪 return image[min_row:max_row, min_col:max_col]
参数调整说明
min_area_ratio:过滤小区域的阈值,默认0.01代表面积小于主区域1%的连通域都会被过滤,若残留区域较大可适当调高到0.05-0.1morph_open_size:形态学运算的卷积核大小,默认3用于过滤散点噪点,无细小噪点可设为0关闭该步骤
针对CBIS-DDSM数据集的预处理场景,该方案可以完全排除胸肌残留、设备标记等无效区域的干扰,仅保留完整乳腺区域。
内容的提问来源于stack exchange,提问作者user574362
相关产品推荐
相关产品推荐

