skimage调用regionprops_table提取axis_major_length报KeyError如何解决
问题解决指南
1 KeyError报错修复
你遇到的KeyError: 'axis_major_length'是scikit-image的版本兼容问题:
- 0.19.0及以上版本的长/短轴属性名为
axis_major_length、axis_minor_length - 低于0.19.0的版本对应属性名为
major_axis_length、minor_axis_length
可选择任意一种方案修复:
- 升级scikit-image到最新版本:
pip install scikit-image --upgrade - 直接将属性名替换为旧版本命名即可
2 提前过滤小面积区域实现
regionprops_table不支持直接传入过滤条件,你可以通过遍历regionprops返回的连通域对象,先筛掉小面积区域后再提取属性生成DataFrame,参考代码如下:
import pandas as pd from skimage import measure # 生成连通域标签图 label_image = measure.label(image > threshold, connectivity=image.ndim) # 按需配置要提取的属性,新版本可替换为axis_major_length、axis_minor_length target_properties = ['area', 'major_axis_length', 'minor_axis_length'] # 遍历连通域先过滤再提取属性 valid_region_list = [] for region in measure.regionprops(label_image, intensity_image=image): # 提前过滤掉面积小于25的区域 if region.area > 25: valid_region_list.append({prop: getattr(region, prop) for prop in target_properties}) # 直接生成清洗后的DataFrame df = pd.DataFrame(valid_region_list)
该方案既不需要生成全量数据后再做清洗,也能避免极小连通域计算轴长时可能出现的异常问题。
内容的提问来源于stack exchange,提问作者han_tuch
相关产品推荐
相关产品推荐

