Plotting lines in an efficient way.

2 vues (au cours des 30 derniers jours)
Simone Cordella
Simone Cordella le 8 Mar 2017
Modifié(e) : Jan le 8 Mar 2017
Hi,
I'm detecting lines on an image by the Hough transform, when I use the function houghlines, it return me a struct that I called lines, containing the start and the end point of the lines detected, I'm plotting it by a foor loop:
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','red');
end
In this manner I obtain this result:
But plotting all the lines with the foor loop takes a lots of time.
In order to speed up, the process I have written the following code:
xy = [];
for k = 1:length(lines)
point1 = lines(k).point1;
point2 = lines(k).point2;
xy = [xy; lines(k).point1; lines(k).point2];
end
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','red');
But the result is:
How I have to modify the script in order to obtain, the same result of the first image?

Réponse acceptée

Jan
Jan le 8 Mar 2017
Modifié(e) : Jan le 8 Mar 2017
It works without loops:
% Abbreviation of: [lines(:).point1; lines(:).point2] :
data = [lines.point1; lines.point2];
x = data(:, 1:2:end);
y = data(:, 2:2:end);
plot(x, y, 'LineWidth', 2, 'Color', 'r');
  3 commentaires
Simone Cordella
Simone Cordella le 8 Mar 2017
Modifié(e) : Simone Cordella le 8 Mar 2017
Thank you. It works well.
Jan
Jan le 8 Mar 2017
Modifié(e) : Jan le 8 Mar 2017
@KSSV: Thanks. Writing "+1" usually means, that one has voted for an answer. Currently my answer has 0 votes, so I assume, it is a general compliment. Thanks. I really appreciate the atmosphere of mutual cooperation in this forum.
I had tried 8 different versions, some contained reshape, transpose and cat, and NaNs also. Actually it would be interesting to see my worse approaches also as a tutorial, but this might look confusing in the forum.

Connectez-vous pour commenter.

Plus de réponses (1)

KSSV
KSSV le 8 Mar 2017
xy = [];
for k = 1:length(lines)
point1 = [lines(k).point1 NaN]; % if throws error try point1 = [lines(k).point1 ; NaN];
point2 = [lines(k).point2 NaN]; % if throws error try point1 = [lines(k).point2 ; NaN];
xy = [xy; point1; point2];
end
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','red');

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by