提取分割图像轮廓的最简单方法是什么?
What's the easiest way to extract contour of segmented image?
假设我有一张这样的图片:
经过一番快速处理后,我得到了斧头的二进制图像,如下所示:
使用 GNU/Octave 获取该图像轮廓的 easiest/fastest 方法是什么?
您可以在图像包中使用bwtraceboundary。这是 Matlab 实现,但使用 Octave 应该非常相似:
首先估计起始像素以寻找边界,然后绘制(BW 是图像)。 (检查 here )
dim = size(BW);
col = round(dim(2)/2)-90;
row = min(find(BW(:,col)));
boundary = bwtraceboundary(BW,[row, col],'N');
imshow(BW)
hold on;
plot(boundary(:,2),boundary(:,1),'g','LineWidth',3);
输出:
在 Octave 中您可以使用 bwboundaries
(但我欢迎实现 bwtraceboundaries
的补丁)
octave:1> pkg load image;
octave:2> bw = logical (imread ("http://i.stack.imgur.com/BoQPe.jpg"));
octave:3> boundaries = bwboundaries (bw);
octave:4> boundaries = cell2mat (boundaries);
octave:5> imshow (bw);
octave:6> hold on
octave:7> plot (boundaries(:,2), boundaries(:,1), '.g');
这里与@Benoit_11的回答有一些不同:
这里我们得到了图像中所有对象的边界。 bwboundaries
也将接受坐标作为输入参数以仅选择一个对象,但我认为应该通过进一步处理您的掩码来完成工作(可能是由于 jpeg 工件)
因为我们得到了所有对象的边界,所以你得到了一个带有坐标的元胞数组。这就是我们使用点来绘制边界的原因(默认是线,当它从一个对象跳到另一个对象时,它会遍布整个图像)。此外,没有记录给定的坐标是否用于连续边界,因此您不应该假设它(同样,我们绘制点的原因)。
读取的图像似乎有一些伪影,我猜这是保存为 jpeg 格式造成的。
假设我有一张这样的图片:
经过一番快速处理后,我得到了斧头的二进制图像,如下所示:
使用 GNU/Octave 获取该图像轮廓的 easiest/fastest 方法是什么?
您可以在图像包中使用bwtraceboundary。这是 Matlab 实现,但使用 Octave 应该非常相似:
首先估计起始像素以寻找边界,然后绘制(BW 是图像)。 (检查 here )
dim = size(BW);
col = round(dim(2)/2)-90;
row = min(find(BW(:,col)));
boundary = bwtraceboundary(BW,[row, col],'N');
imshow(BW)
hold on;
plot(boundary(:,2),boundary(:,1),'g','LineWidth',3);
输出:
在 Octave 中您可以使用 bwboundaries
(但我欢迎实现 bwtraceboundaries
的补丁)
octave:1> pkg load image;
octave:2> bw = logical (imread ("http://i.stack.imgur.com/BoQPe.jpg"));
octave:3> boundaries = bwboundaries (bw);
octave:4> boundaries = cell2mat (boundaries);
octave:5> imshow (bw);
octave:6> hold on
octave:7> plot (boundaries(:,2), boundaries(:,1), '.g');
这里与@Benoit_11的回答有一些不同:
这里我们得到了图像中所有对象的边界。
bwboundaries
也将接受坐标作为输入参数以仅选择一个对象,但我认为应该通过进一步处理您的掩码来完成工作(可能是由于 jpeg 工件)因为我们得到了所有对象的边界,所以你得到了一个带有坐标的元胞数组。这就是我们使用点来绘制边界的原因(默认是线,当它从一个对象跳到另一个对象时,它会遍布整个图像)。此外,没有记录给定的坐标是否用于连续边界,因此您不应该假设它(同样,我们绘制点的原因)。
读取的图像似乎有一些伪影,我猜这是保存为 jpeg 格式造成的。