Clear Filters
Clear Filters

How to set custom origin point?

51 views (last 30 days)
Elisa Lafforgue
Elisa Lafforgue on 22 Jun 2018
Commented: Phong on 28 May 2023
Hello,
I can't manage to find any solution to this problem (do I have to precise I am a complete novice with matlab):
Lets say I have an image named "image" and I show it on screen with axis. By default, my axis will be, from one border to another, zero to end (number of the last column).
But I have a point in "image" that I want to be zero, the origin. I know that point from a mouse input. How do I explain to matlab that I want this point to be the origin of the axis?
Ps: does the following script do something good? (I found it in "How to change the default origin of the axis of rotation in 3d plot matlab") - I don't have matlab today to try that one... But I am not sure if it can even work with my problem.
origin = [13 58]
If you want some details about the contexte of this problem, here it is:
I am currently working in engineering and I have to do some experiments. In these experiments, I have to take two pictures of a burner: one with the burner cold and a graduated metal rod in it to make the mire (although I don't know if the term exist in english), the other picture is of the burner functionning. The mire help me to transform the image in matlab and know the distances, then I apply the same transformation in the second picture and I can have the flame length simply by mesuring from a point to another.To simplify the operation, I want the origin at the exit of the burner, so that I have directly the distance from the exit when I select a point on the flame. If I am not clear enough, let me know, please.
Thank you for your time and patience
E.L.

Accepted Answer

Image Analyst
Image Analyst on 22 Jun 2018
Try this:
grayImage = imread('cameraman.tif');
[rows, columns, numberOfColorChannels] = size(grayImage);
origin = [13, 58]; % Assume x, y, NOT row, column
xdata = -origin(1) : columns - origin(1);
ydata = -origin(2) : columns - origin(2);
imshow(grayImage, 'XData', xdata, 'YData', ydata);
axis on;
hp = impixelinfo
grid on;
  2 Comments
Elisa Lafforgue
Elisa Lafforgue on 26 Jun 2018
Thank you very much, it does work perfectly!
Phong
Phong on 28 May 2023
% I'm Nguyen Tien Phong, Hung Yen University of Technical Education
%This is an application program to plot multiple graphs on the same axes
%You guys edit it to be beautiful and suitable for multi-paragraph math problems
%Ngtienphong126@gmail.com
%Good luck
clear all
syms z
y1=3*z^3+2 % Ve tu 0 den 10 Plot this graph from 0 to 10; starting position is 0
y2=3*z^4+2*z^2+6 % Ve tu 10 den 25 (0-10-10-15) Plot this graph from 0 to 15; starting position is 10
L1=10
L2=15
Xtong=linspace(0,L1+L2,20) % Chia thanh 20 doan boi 20 diem de cbi ve cho tat ca
Yt=zeros(1,20)% Tao ra de ve cac diem chia tren z cua tat ca cac doan i
X2=linspace(0,L1,100); % Chia doan 1 thanh 100 diem de ve do thi cho doan 1
A2=subs(y1,z,X2) % Nhan gia tri tai 100 diem de ve do thi cho doan 1
plot(Xtong,Yt,'Linewidth',1) % X tong la tong chieu dai de xac dinh chieu dai truc Z khi ve
hold on
plot(X2,A2,'g','Linewidth',4) % Do thi doan 1
Xve2=linspace(10,25,100); % Chia thanh 100 diem cho doan i=2 tro di
XXX2=linspace(0,L2,100)
B2=subs( y2,z,XXX2) % Nhan 100 gia tri de ve duong do thi
plot(Xve2,B2,'r','Linewidth',4); % Ve do thi
xlabel('Duong truc Z');
title(['Bieu do Nz ', ': kN'])

Sign in to comment.

More Answers (2)

Elisa Lafforgue
Elisa Lafforgue on 22 Jun 2018
Thank you for your answer but with those code we have:
ax.YAxisLocation = 'origin'; % setting y axis location to origin
to set axis location to an automatic origin
Which you can change to put 'left', 'right', 'bottom'... but not a custom coordinates.
My problem is that I want to input some coordinates and make it be the new 'origin' of my axis. How can I do this?

Mark Saad
Mark Saad on 22 Jun 2018
Edited: Mark Saad on 22 Jun 2018
I was trying to do this the other day. I could not find anything, so I just manually shifted all of my data points. Let's say you have
x = [1 2 3 4];
y = [5 6 7 8];
and you want (1,5) to be the origin. Then just do
x = x - 1;
y = y - 5;
Above is an image of the original points on the left, and the points shifted so that (2,6) is the origin on the right.
  4 Comments
Mark Saad
Mark Saad on 26 Jun 2018
I used the scatter function to plot the points alone.
% Set initial points.
x = [1 2 3 4];
y = [5 6 7 8];
% Plot initial points
subplot(1,2,1);
scatter(x,y,'r');
% Shift the points
x = x - 1;
y = y - 5;
% Plot the shifted points
subplot(1,2,2);
scatter(x,y,'b');
Elisa Lafforgue
Elisa Lafforgue on 27 Jun 2018
Thank you Mark Saad, it could be helpful some time.
Yes, Image Analyst, I have an image and not a plot. The answer provided just above by Mark Saad is interesting from my point of vu because I did not know we could such a thing and as I am trying to understand matlab better it is, indeed, very interesting.
Yet your answer was the best because it was exactly what I looked for and it work perfectly with my code.
The reason I picked the other answer instead is simple: I did not know what the "accept the answer" stood for... Actually I thought it was to make the answer seeable or to put an end to the thread as the answer was already given. And I cannot undo this apparently.
Sorry

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!