1

我正在 Octave 中开发一些例程,需要显示图像,然后在顶部绘制一条曲线,希望能覆盖一些图像特征。

但是,我无法弄清楚如何匹配图像和绘图的原点/比例。例如,给定一个 1024x1024 像素的图像,我可以这样做:

a=imread('image.png');
x=linspace(1,1024,100);
y=x;
imshow(a);
hold on;
plot(x,y);

但这条线没有缩放到图像,也没有从角落开始。(我知道图像和情节应该起源于不同的角落)。当我从光标位置检查图形坐标时,图像显然不在原点,所以我猜这就是问题的根源。

4

3 回答 3

1

在这种情况下使用image()代替imshow()

a = imread ('image.png');
x = linspace (1, 1024, 100);
y = x;
image (a);
hold on
plot (x, y);
axis square
于 2013-02-21T09:58:32.300 回答
0

您可以通过这种方式在图像上绘制函数:

  1. 像这样创建一个名为 stuff.jpg 的图像,任何大小都是可能的,但我制作了大约 6x6 像素,所以我可以测试:

在 gnu octave 中的图像上绘制函数

您可以通过这种方式将函数绘制在其他函数之上:

octave> x = 0:1:5;
octave> plot(x, (3/2).^x, "linewidth", 2, "color", "blue");
octave> hold on
octave> plot(x, 2.^x, "linewidth", 2, "color", "red");
octave> plot(x, factorial(x), "linewidth", 2, "color", "green");
octave> plot(x, x.^3, "linewidth", 2, "color", "black");
octave> 

对我来说,它显示了这一点:

octave,gnu octave 绘制多行

发现这里,有一个演练:

http://ericleschinski.com/c/algorithm_complexity_big_o_notation/

考虑到我的年龄,它绘制了我的功率水平。已经九千多了。

于 2015-04-19T04:29:55.857 回答
0

image 的问题在于它把 (0,0) (而不是 (min_x,min_y)) 放在左上角,而我们通常期望 (0,0) 在左下角。

此外,它仅使用 x 和 y 向量的最大值和最小值,因此 y(end:-1:1) 不起作用。

im = imread('file.png'); %read the file
image([xmin xmax],[ymin ymax],im(end:-1:1,:,:)); %put the image on the screen upside down
axis('xy'); % flip the image by putting (0,0) at bottom left. Image now right side up
axis('square'); if you want to aspect ratio of the image to be 1:1
hold on;
plot([xmin xmax],[ymin ymax]) % this should draw a diagonal from bottom left to upper right.
% plot whatever you want to overlay
于 2017-02-10T21:50:11.853 回答