How can I calcuate the distance from two selected points?

조회 수: 14 (최근 30일)
Francesco
Francesco 2014년 2월 1일
댓글: Image Analyst 2021년 1월 17일
Is there a simple way (a command) to be able to identify in a grafical way the distance beetween two points on a figure? If I have a figure with some points I wonder if There is a way that allow you to have in ouput the distance between the two selected points? For example a sort of ginput command. Have you got an idea?

채택된 답변

Amit
Amit 2014년 2월 1일
편집: Amit 2014년 2월 1일
  댓글 수: 9
Amit
Amit 2014년 2월 1일
If you notice, there is a major difference between what I told you and what you implemented.
In your version of code, you put api variable afterwards.
imdistline give you the value of distance on the figure. However the output h1 is not the distance but a handle for iptgetapi().
You need to do this exactly the way I am writing below:
h1 = imdistline(gca,[y(1) x(1)],[y(2) x(2)]);
api = iptgetapi(h1);
distanza = round(api.getDistance);
Image Analyst
Image Analyst 2014년 2월 1일
Francesco, can you answer my question about how you want to do it without selecting points?

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Image Analyst
Image Analyst 2014년 2월 1일
Try this method with improfile:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 20;
folder = fullfile(matlabroot, '\toolbox\images\imdemos');
filePattern = fullfile(folder, '*.jpg')
[f p] = uigetfile(filePattern);
subplot(2, 1, 1);
originalImage = imread([p f]);
grayImage = rgb2gray(originalImage);
imshow(grayImage);
title('Original Image', 'FontSize', fontSize);
axis on;
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')
uiwait(msgbox('Left click, then right click'));
[x, y, intensityProfile] = improfile();
% Plot crosses over where you clicked.
hold on;
plot(x, y, 'r-', 'LineWidth', 3);
% Plot line
plot([x(1), x(end)], [y(1), y(end)], 'r+', 'LineWidth', 3, 'MarkerSize', 20);
% Plot intensity profile in another plot.
subplot(2, 1, 2);
plot(intensityProfile, 'LineWidth', 3);
grid on;
title('Intensity Profile', 'FontSize', fontSize);
distance = sqrt((x(1) - x(end))^2 + (y(1) - y(end))^2)
message = sprintf('The distance = %.1f pixels.', distance);
uiwait(helpdlg(message));
Note: you still have to select the two points.
  댓글 수: 2
nehad mohamed
nehad mohamed 2021년 1월 17일
[x, y, intensityProfile] = improfile();
error in this
Image Analyst
Image Analyst 2021년 1월 17일
Sorry but my Crystal Ball Toolbox is still on order, and, until then, I can't see your monitor. Can you tell me the error? Because when I copied and pasted the code above, it ran just fine. So post your modified code in your own question and I'll fix it there.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Specifying Target for Graphics Output에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by