问题描述
要对如下所示的二值标签图做如下处理:
获取每一个闭合小区域的轮廓曲线坐标
获取每一个闭合小区域的面积
获取每一个闭合小区域的 bounding box
处理方法
问题一: 获取每一个闭合小区域的轮廓曲线坐标,可以直接使用 bwboundaries 函数进行处理。
I = imread(img);
B = bwboundaries(I, 'noholes');
此时 B 为一个 n*1 的元胞数组,n 为闭合区域的个数,每个 cell 中存储了一个区域的轮廓坐标点,且坐标点是按照轮廓曲线顺时针方向存储的。
问题二: 要获取每一个小区域的面积,简单计算二值矩阵中不为 0 的元素个数已经不再适用。考虑先用 bwlabel 对标签的不同区域打上标记,默认按照 8 联通。然后可以根据标记像素值求取每个小区域的面积。
[L, num] = bwlabel(I);
area1 = sum(sum(L == 1));
area2 = sum(sum(L == 2));
这样就能分别求出两个区域的面积。
问题三: 要获取每一个小区域的 bounding box 很简单,已经知道了它们各自的轮廓坐标,求出这些坐标中 x(列坐标) 和 y(行坐标) 最小和最大的值:(y