在MATLAB中绘制图像背景

时间:2016-06-03 12:42:28

标签: image matlab plot overlap

我想在图像上绘制图形。我将本教程引用到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>

谢谢你们。

This is the satellite image, imagesc(I)

3 个答案:

答案 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。