matlab绘制图像上的数据图

时间:2014-07-15 23:26:04

标签: image matlab plot

我想要做的是绘制图形图像(例如pdf文件或扫描图像)。接下来,我想在图像中的图形上叠加一个轴,然后在该轴上绘制数据(在图像上)。

使用imtool,我知道图像中图形的坐标(在这种情况下,x范围= ~52-355像素,y范围= 23(顶部) - 262(底部)像素。)

这就是我的尝试:

I = imread('C:\MATLAB\R2014a\help\images\ref\ftrans2_fig.png');
I = squeeze(uint8(mean(I,3)));
figure, imshow(I)
[rows, cols] = size(I);
x_data = (-1 : .01 : +1)';
y_data = 1 - x_data.^2;
h1 = axes('Position',([52, 23, 355-52, 262-23] ./ [cols, rows, cols, rows] ));
set(h1, 'Color', 'none')
hold on
plot(x_data, y_data, '-rx')

问题:知道图像中图形的像素坐标,如何确定图中轴的正确位置,(我的代码无法解释图框的实际大小,周围的灰色边框)图片)。我必须为几个图像和数据集执行此操作,因此我想要一个自动方法,假设我提前在图像中找到图形的坐标。

感谢您的回复! (第一次发帖,请善待)

2 个答案:

答案 0 :(得分:0)

您可以通过将图像强制到与绘图相同的轴上来解决问题。试试这个:

I = imread('C:\MATLAB\R2014a\help\images\ref\ftrans2_fig.png');
I = squeeze(uint8(mean(I,3)));
[rows, cols] = size(I);
x_data = (-1 : .01 : +1)';
y_data = 1 - x_data.^2;
h1 = axes('Position',([52, 23, 355-52, 262-23] ./ [cols, rows, cols, rows] ));
set(h1, 'Color', 'none')
hold on
image(I, 'Parent', h1);
plot(h1, x_data, y_data, '-rx')

这应该确保绘图轴和图像轴具有相同的原点,因为它们将是同一个。您可能需要调整大小调整代码。如果不适合你,请告诉我。

祝你好运!

答案 1 :(得分:0)

我想我已经弄清楚了。 如果我可以使用它会更容易:

figure, h1=imshow(I)
get(h1,'Position')

但结果是“名称'位置'不是”图像“类实例的可访问属性。”

相反,这似乎有效:

I = imread('C:\MATLAB\R2014a\help\images\ref\ftrans2_fig.png');
I = squeeze(uint8(mean(I,3)));
in_mag = 300;
figure, imshow(I, 'Border', 'tight', 'InitialMagnification', in_mag)
[rows, cols] = size(I);
x_data = (-1 : .01 : +1)';
y_data = 1 - x_data.^2;
% Coord of graph in image pixels
x_0 = 50; x_max = 354; y_0 = 262; y_max = 23;
h1 = axes('Position',([x_0,   rows-y_0,   x_max-x_0,   y_0-y_max] ...
                   ./ [cols,   rows,      cols,          rows] ));
set(h1,'Color','none')
hold on
plot(x_data, y_data, '-rx')
ylim([0,1.4])
set(gca,'YColor', [0 0 1], 'XColor', [0 0 1])

但是,如果有人有更好的想法,我会非常乐意探索它!

由于