计算图像上曲线的长度

时间:2016-08-21 03:41:32

标签: matlab matlab-figure

考虑到曲线的数据和图像的大小,如何计算曲线的长度?

curve = [9.93,4;9.87,4.10;9.80,4.20;9.74,4.30;9.68,4.40;9.63,4.50;9.59,4.60;9.55,4.70;9.53,4.80;9.51,4.90;9.50,5;9.50,5.10;9.51,5.20;9.48,5.30;9.55,5.40;9.45,5.47;9.55,5.52;9.45,5.59;9.55,5.65;9.45,5.72;9.55,5.77;9.45,5.84;9.55,5.90];
backgroud = ones(20,20);
imshow(backgroud) 
hold on, plot(curve(2,:),curve(1,:),'r');

1 个答案:

答案 0 :(得分:3)

要扩展注释,您可以简单地将构成曲线的线段的长度相加。这可以使用以下代码完成。

curve = [9.93,4;9.87,4.10;9.80,4.20;9.74,4.30;9.68,4.40;9.63,4.50;9.59,4.60;9.55,4.70;9.53,4.80;9.51,4.90;9.50,5;9.50,5.10;9.51,5.20;9.48,5.30;9.55,5.40;9.45,5.47;9.55,5.52;9.45,5.59;9.55,5.65;9.45,5.72;9.55,5.77;9.45,5.84;9.55,5.90];

len = sum(sqrt(sum(diff(curve).^2,2)))

结果

len =

    2.4757

编辑:正如烧杯指出的那样,指数在你的回答中是倒退的。看一下curve_x1curve_x2等的值......您会发现它们只是一个值。如果您反转索引,我们会得到相同的结果。此外,作为一个完整性检查,看一下曲线的图,它在第一维中跨越约2个单位,在第二维中跨越约0.4个单位,因此接近2.5的数字似乎是合理的,大约8的数字太大

curve_x1 = num2cell(curve(1:end-1,1));
curve_y1 = num2cell(curve(1:end-1,2));
curve_x2 = num2cell(curve(2:end,1));
curve_y2 = num2cell(curve(2:end,2));

instance_length = cellfun(@(x1,y1,x2,y2) sqrt((x2-x1)^2+(y2-y1)^2), curve_x1,curve_y1,curve_x2,curve_y2);
distance = sum(instance_length)