【问题标题】:matlab plot graph of data over an imagematlab 在图像上绘制数据图
【发布时间】:2014-09-06 07:58:47
【问题描述】:

我想做的是绘制图形的图像(例如 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')

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

感谢您的回复! (第一次发帖,请多多关照)

【问题讨论】:

    标签: image matlab plot


    【解决方案1】:

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

    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')
    

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

    祝你好运!

    【讨论】:

    • 这不起作用。如果您可以访问 ftrans2_fig.png(与 matlab 一起提供),您会看到它变得非常大,并将数据绘制在角落里。此外,由于某种原因(另一个问题),与 imshow 相比, image 会产生非常丑陋的情节。但是,非常感谢您的回复。
    • 正如我所提到的,您可能需要调整您的尺寸代码,尝试更多地操作比例,一般来说,上面的代码应该可以解决您提出的问题。 (绘图和图像必须始终共享一个原点。)尝试确保绘图与图像中的像素数具有相同的最大值。您不能只覆盖它们并确保它们始终重叠。您必须实际使用 x_data 和 y_data 以使它们适合图像的大小。明天我会在我的 MATLAB 机器附近时看看这个......
    【解决方案2】:

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

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

    但这会导致“名称 'Position' 不是类 'image' 实例的可访问属性。”

    相反,这似乎可行:

    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])
    

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

    谢谢

    【讨论】:

      猜你喜欢
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 2012-05-26
      相关资源
      最近更新 更多