计算图像上曲线的长度

To calculate the length of a curve on the image

给定曲线的数据和图像的大小,如何计算曲线的长度?

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');

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

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)