我正在使用这个阈值方法绘制图像轮廓点,但我的轮廓有直线段。我想在每个点处绘制相对于垂直线的角度,因此我真的需要曲线。
我可以使用凸包获得平滑曲线。
该图像生成如下:
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)
包含重复的值。您是要获取最接近红点的点,还是等距离的点? - Cris Luengo