/ / Pour calculer la longueur d'une courbe sur l'image - matlab, matlab-figure

Pour calculer la longueur d'une courbe sur l'image - matlab, matlab-figure

Étant donné les données de la courbe et la taille de l'image, comment calculer la longueur de la courbe?

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

Réponses:

3 pour la réponse № 1

Pour développer le commentaire, vous pouvez simplement additionner les longueurs des segments de ligne qui composent la courbe. Cela pourrait être accompli en utilisant le code suivant.

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

résultat

len =

2.4757

Edit: Comme l'a souligné Beaker, les indices sont inversés dans votre réponse. Jetez un coup d’œil aux valeurs de curve_x1, curve_x2, etc... et vous verrez qu'ils ne sont qu'une valeur unique. Si vous inversez les indices, nous obtenons le même résultat. En outre, lorsqu'un contrôle de cohérence examine le graphique de la courbe, il couvre environ 2 unités dans la première dimension et environ 0,4 unités dans la seconde dimension, de sorte qu'un nombre proche de 2,5 semble raisonnable, un nombre autour de 8 étant beaucoup trop grand. .

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)