Python与MATLAB中regionprops返回BoundingBox差异及对齐方案咨询
BoundingBox格式差异说明
- MATLAB
regionprops返回的BoundingBox格式为[x_min, y_min, width, height]:- 坐标以1为起始原点,定位在像素的中心位置,所以边界起始值带0.5的偏移量
- x对应图像水平方向(列坐标),y对应图像垂直方向(行坐标)
- 后两位是 bounding box 的宽度(水平方向像素数)、高度(垂直方向像素数)
- Python scikit-image
regionprops返回的bbox格式为[y_min, x_min, y_max, x_max]:- 坐标以0为起始原点,定位在像素的左上角,无小数偏移
- 结果为左闭右开区间,后两位是边界的最大索引值(不是宽高)
- 维度顺序和MATLAB相反,垂直方向(行坐标)在前,水平方向(列坐标)在后
数值匹配验证
你给出的输出完全符合上述规则:
以第一组结果为例,MATLAB输出[194.5000, 156.5000, 378.0000, 154.0000]:
- y_min = floor(156.5) = 156
- x_min = floor(194.5) = 194
- y_max = 156.5 + 154 = 310
- x_max = 194.5 + 378 = 572
和Python输出的第一组[156, 194, 310, 572]完全一致,第二组结果同理可验证匹配。
MATLAB代码修改方案
在原有代码基础上增加格式转换即可,向量化写法如下:
props = regionprops(bw,'BoundingBox'); v = cat(1, props.BoundingBox); % 转换为Python scikit-image格式的bbox v_python = [floor(v(:,2)), floor(v(:,1)), floor(v(:,2)+v(:,4)), floor(v(:,1)+v(:,3))];
运行后v_python就和Python输出结果完全一致。
注意:如果连通域顺序不匹配,需要先确认两个平台的label函数排序规则是否对齐,你的示例中顺序一致无需额外调整。
内容的提问来源于stack exchange,提问作者Zyder
相关产品推荐
相关产品推荐

