【发布时间】:2018-08-23 16:17:11
【问题描述】:
我正在绘制图像轮廓点using this threshold method,但我的轮廓有直线段。我想在每个点绘制垂直角度,所以我真的需要曲线。
我可以使用凸包获得平滑曲线。
图像生成如下:
B = bwboundaries(BW3);
outline = B{1,1};
plot(outline(:,2),outline(:,1),'r.','LineWidth',1)
K = convhull(outline(:,2),outline(:,1));
plot(outline(K,2),outline(K,1),'b+--','LineWidth',1)
但是我怎样才能“填补”凸包点之间的空白?我希望每个红点在蓝色曲线上都有一个点。
我尝试使用 interp1 来实现:
outline2 = outline;
outline2(:,2)=interp1(outline(K,1),outline(K,2),outline(:,1),'spline');
但出现以下错误: “使用 griddedInterpolant 时出错 网格向量必须包含唯一点。”
我认为这是因为轮廓形成了一个循环,而不是每个 y 的唯一 x 点。是否有其他方法可以使用样条线填充这些缺失点?
我也对寻找平滑边缘的其他想法持开放态度。
感谢您的帮助!
【问题讨论】:
-
这是因为
outline(:,1)包含重复值。您是要获得离红点最近的点,还是只是等距点? -
我希望曲线上的一个点(在对象的每一侧)为范围内的每个 y 值,同样对于 x 轴,以使轮廓闭合。这些点应位于(或靠近)蓝色曲线。
标签: matlab image-processing interpolation