我有一个二进制图像,上面有非像素宽度的非闭合曲线。我想把这条曲线作为一个点列表(按正确的顺序)。我发现bwboundaries
函数试图包装所有非零像素,因此在这种情况下返回重复点:
>> A = [0 0 0; 1 1 1; 0 0 0];
>> b = bwboundaries(A)
ans =
[5x2 double]
>> b{1}
ans =
2 1
2 2
2 3
2 2
2 1
bwtraceboundary
做同样的事情
>> bwtraceboundary(A, [2 1], 'E')
ans =
2 1
2 2
2 3
2 2
2 1
有没有任何标准方法来获得像[2 1; 2 2; 2 3]立即?
答案 0 :(得分:3)
它产生双重条目,因为您的区域只有一个像素宽。我认为没有一种标准方法可以直接处理您的特殊问题。但是,您只需使用unique()函数来消除结果的双重条目。
要保持点的原始顺序,只需执行:
b = bwboundaries(A);
[dummy, ind] = unique(b{1}, 'rows', 'first');
contour = b{1}(sort(ind), :);