我想要做的是绘制图形图像(例如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')
问题:知道图像中图形的像素坐标,如何确定图中轴的正确位置,(我的代码无法解释图框的实际大小,周围的灰色边框)图片)。我必须为几个图像和数据集执行此操作,因此我想要一个自动方法,假设我提前在图像中找到图形的坐标。
感谢您的回复! (第一次发帖,请善待)
答案 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])
但是,如果有人有更好的想法,我会非常乐意探索它!
由于