我想在图像上绘制图形。我将本教程引用到Plot over an image background in MATLAB并且工作正常:
% replace with an image of your choice
img = imread('myimage.png');
% set the range of the axes
% The image will be stretched to this.
min_x = 0;
max_x = 8;
min_y = 0;
max_y = 6;
% make data to plot - just a line.
x = min_x:max_x;
y = (6/8)*x;
imagesc([min_x max_x], [min_y max_y], img);
hold on;
plot(x,y,'b-*','linewidth',1.5);
但是,当我将程序应用于我的研究案例时,它不起作用。我想做点什么:
I = imread('img_png.png'); % here I load the image
DEM = GRIDobj('srtm_bigtujunga30m_utm11.tif');
FD = FLOWobj(DEM,'preprocess','c');
S = STREAMobj(FD,flowacc(FD)>1000);
% with the last 3 lines I calculated the stream network on a geographic area using the TopoToolBox
imagesc(I);
hold on
plot(S)
目的是在同一区域的卫星图像上绘制流网络。 不允许代码工作的两个示例之间的唯一区别在于绘图线,在第一种情况下“plot(x,y)”工作,而在另一个“plot(S)”中则没有。< / p>
谢谢你们。
答案 0 :(得分:2)
plot
STREAMobj
方法可能会执行自己的自定义绘图,包括创建新的数字,轴,切换hold
状态等等。因为您可以& #39;轻松控制他们plot
例程的作用,它可能更容易翻转你的绘图顺序,以便在工具箱绘制{{>之后绘制你的东西 1}}。这样您就可以完全控制图像的添加方式。
STREAMobj
答案 1 :(得分:1)
也许我正在向合唱团讲道或忽略这里的某些东西,但你使用的例子实际上将图像映射到情节的数据范围,因此行:
% set the range of the axes
% The image will be stretched to this.
min_x = 0;
max_x = 8;
min_y = 0;
max_y = 6;
imagesc([min_x max_x], [min_y max_y], img);
直接绘制图像的地方
imagesc(I);
如果现在您的数据坐标和图像坐标差别很大,您可以看到其中一个。
答案 2 :(得分:1)
谢谢你们,我这样解决了:
I = imread('orto.png'); % satellite image loading
DEM = GRIDobj('demF1.tif');
FD = FLOWobj(DEM,'preprocess','c');
S = STREAMobj(FD,flowacc(FD)>1000); % Stream network extraction
x = S.x; % [node attribute] x-coordinate vector
y = S.y; % [node attribute] y-coordinate vector
min_x = min(x);
max_x = max(x);
min_y = min(y);
max_y = max(y);
imagesc([min_x max_x], [min_y max_y], I);
hold on
plot(S);
以下是生成的图片:stream network over the satellite image
实际上,流网络与卫星图像不匹配只是因为我暂时使用不同的图像和DEM。