how can I plot a graph over an image in Matlab?

조회 수: 410 (최근 30일)
DARSHAN KUMAR BISWAS
DARSHAN KUMAR BISWAS 2022년 6월 30일
댓글: Adam Danz 2022년 7월 5일
I want to plot the graph over the 1st image.

채택된 답변

Kevin Holly
Kevin Holly 2022년 6월 30일
Load Example Image
exampleimage = imread('peppers.png');
Flip the image vertically (y-axis direction will be flipped vertically later)
exampleimage = flipud(exampleimage);
Display image
imshow(exampleimage)
Use hold on so more children can be added to the axes
hold on
Create scatter plot
x=1:20:300;
y=x;
scatter(x,y,'filled','w')
Change y-dir to normal (Note, y-dir is upside down when images are displayed by default)
set(gca,'YDir','normal') %gca stand for get current axes
  댓글 수: 6
Rik
Rik 2022년 7월 5일
Do you want to put them in subplots, or do you want to put all images in the same axes?

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

추가 답변 (2개)

Adam Danz
Adam Danz 2022년 6월 30일
Plot the image using image or imagesc or some other image function that allows you to specify the x and y values of the image. That way you set the image coordinates to the data coordinates.
Then just hold on and plot the data into the same axes.
Note that image functions flip the y axis so you may need to flip it back to normal using set(gca, 'YDir','Normal') or flip your data when you plot it.
If you have additional questions, share the code you've got so far and let us know specificially where you're stuck.
  댓글 수: 2
DARSHAN KUMAR BISWAS
DARSHAN KUMAR BISWAS 2022년 6월 30일
a=imread('F:\Google drive\6.Internship\surge\Core Internship\IMG_0.jpg');
b=imread('F:\Google drive\6.Internship\surge\Core Internship\IMG_20.jpg');
c=a(:,:,3)-b(:,:,3);
imadjust(c);
H=fspecial("average",10);
cAvg=imfilter(c,H);
max(max(c));
min(min(c));
no_row=size(c,1);
no_col=size(c,2);
Xbox=50;
P=floor(no_col/Xbox);
k=zeros(1,4857);
x=linspace(1,Xbox,Xbox);
q=zeros(453,4857);
y=linspace(1,Xbox,Xbox);
for i=1:453
for j=1:4857
if cAvg(i,j)>10
q(i,j)=cAvg(i,j);
else
q(i,j)=5;
end
end
end
l=zeros(45,Xbox);
for m=1:45
for n=1:Xbox
l(m,n)=mean(mean(q(((m-1)*10+1):10*m,((n-1)*24+1):P*n)));
end
end
for i=1:Xbox
p=l(:,i);
for j=1:45
if p(j)>=10
o(i)=j;
break
else o(i)=45;
end
end
end
for i=1:Xbox
v=((45-o)*20)/45;
end
plot(y,v,'Bx')
DARSHAN KUMAR BISWAS
DARSHAN KUMAR BISWAS 2022년 6월 30일
For the graph and the image, the y-axis values are opposite to each other.

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


Rik
Rik 2022년 6월 30일
You need to use the same axes. The easiest solution is to use hold, probably the line below will already do what you need:
hold(gca,'on')
  댓글 수: 1
DARSHAN KUMAR BISWAS
DARSHAN KUMAR BISWAS 2022년 6월 30일
a=imread('F:\Google drive\6.Internship\surge\Core Internship\IMG_0.jpg');
b=imread('F:\Google drive\6.Internship\surge\Core Internship\IMG_20.jpg');
c=a(:,:,3)-b(:,:,3);
imadjust(c);
H=fspecial("average",10);
cAvg=imfilter(c,H);
max(max(c));
min(min(c));
no_row=size(c,1);
no_col=size(c,2);
Xbox=50;
P=floor(no_col/Xbox);
k=zeros(1,4857);
x=linspace(1,Xbox,Xbox);
q=zeros(453,4857);
y=linspace(1,Xbox,Xbox);
for i=1:453
for j=1:4857
if cAvg(i,j)>10
q(i,j)=cAvg(i,j);
else
q(i,j)=5;
end
end
end
l=zeros(45,Xbox);
for m=1:45
for n=1:Xbox
l(m,n)=mean(mean(q(((m-1)*10+1):10*m,((n-1)*24+1):P*n)));
end
end
for i=1:Xbox
p=l(:,i);
for j=1:45
if p(j)>=10
o(i)=j;
break
else o(i)=45;
end
end
end
for i=1:Xbox
v=((45-o)*20)/45;
end
plot(y,v,'Bx')

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

카테고리

Help CenterFile Exchange에서 Line Plots에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by