How to get the same pixel points in an image using Euclidean Distance when the image is scaled up or down?
2 views (last 30 days)
Show older comments
I have two images, image A is normal and the image B is scaled up and on the image A I have calculated the euclidean distance between two pixel coordinates (x and y) and i want to be able to find the location of x and y in the image B that is scaled up using the euclidean distance I calculated in the image A. Assuming i can find pixel x location in the scaled image B, how then can I find pixel y coordinate in the scaled image B using the distance from pixel x to y in normal image A?. Is this possible? and how can I go about it?
Thanks
2 Comments
Accepted Answer
Adam Danz
on 9 Apr 2020
Edited: Adam Danz
on 9 Apr 2020
Think of the line that connects two points P & Q as the hypotenuse of a right triangle where the length of leg-1 is the x-distance between the two points and the length of leg-2 is the y-distance (sign indicates direction). You can compute leg-1 and leg-2 lengths easily by subtracting the coordinates Q from coordinates P (assuming a linear scale).
Then you just have to rescale leg-1 and leg-2 lengths to the upscaled image scale. The scale conversion for the x axis is just the range of the x-limits of image-2 divided by the range of x-limits of image-1. Same for the y-axis. If the extent of image-2 is larger than image-1 the value should be larger than 1. Multiply that conversion factor by the lengths of leg-1 and leg-2 to get the new leg-lengths which can be added to the know coordinate to produce the 2nd coordinate.
Here's a demo where Q1, P1 and Q2 are known and the P2 is calculated.
P = [2,5];
Q = [9,7];
Q2 = [20, 45];
figure()
sp(1) = subplot(1,2,1);
plot([P(1),Q(1)],[P(2),Q(2)], 'bo')
xlim([0,12])
ylim([0,12])
text(2.5,5,'Q1')
text(9.5,7,'P1')
grid on
sp(2) = subplot(1,2,2);
plot(Q2(1), Q2(2), 'bo')
xlim([0,120])
ylim([0,150])
text(25, 45,'Q2')
grid on
% compute P
xFactor = range(sp(2).XLim)/range(sp(1).XLim);
yFactor = range(sp(2).YLim)/range(sp(1).YLim);
legX = Q(1) - P(1);
legY = Q(2) - P(2);
P2(1) = legX * xFactor + Q2(1);
P2(2) = legY * yFactor + Q2(2);
% Add to plot
hold(sp(2), 'on')
plot(sp(2), P2(1), P2(2), 'bo')
text(P2(1)+5, P2(2), 'P2', 'Color', 'r')

8 Comments
More Answers (0)
See Also
Categories
Find more on Display and Exploration in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!