【问题标题】:Using meshgrid to interpolate image's physical coordinates使用 meshgrid 插值图像的物理坐标
【发布时间】:2016-04-27 02:21:16
【问题描述】:

我是 Matlab 的新手,我正在模拟一种需要我图像的物理坐标的物理现象。例如,我可以使用以下内容来给出图像的尺寸。

a = phantom(80,250) 
a(81:250,:) = [];

对于我的物理系统,我需要每个像素之间的间距为 2,并且对象从 x 中的 0:2:280 和 y 中的 0:2:410 开始。我正在尝试使用 meshgrid 来查看它是否会以

开头
[x,y] = meshgrid(1:1:100, 1:1:300);
[xm,ym] = meshgrid(1:.5:300, 1:.5:450);

M = interp2(x,y,a,xm,ym,'nearest');

这并没有给我我想要的东西,而是我认为我可以实现解决方案的方式。

我的基本问题是我有尺寸为 (80,250) 的图像,我需要对其进行采样/缩放,以便我可以将右上角的一个点与位置 (280mm,410mm) 相关联,每个点之间的样本为 2mm像素。这是正确的方法还是我应该使用其他功能?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    首先,图片不是 80 x 250。请务必查看documentation

    在这一步之后,您究竟希望做什么?这确实决定了这是否是解决此问题的适当方法。

    但根据您的代码和最后一条语句,您希望 x 范围为 0 - 280,y 范围为 0 - 410。

    xrange = linspace(0, 280, size(a, 2));
    yrange = linspace(0, 410, size(a, 1));
    

    所以现在您的图像参考坐标将是

    [xx,yy] = meshgrid(xrange, yrange);
    

    现在,您想如何采样完全取决于您。听起来你想要每 2 毫米?因此,让我们构建网格以进行采样。

    [xq, yq] = meshgrid(0:2:max(xx(:)), 0:2:max(yy(:)));
    

    现在我们可以实际进行插值了。要记住的重要一点是参考坐标(xy必须与您的输入图像 (a) 大小相同。这是您最初尝试的问题之一。

    M = interp2(x,y,a,xq,yq,'nearest');
    

    【讨论】:

    • 我希望做的基本上是使用该特定坐标处的图像值。例如,图像在 (280, 410) 处的值可能为 1,但 Matlab 中的图像具有它,因此 (80,250) 的值为 1。但是,图像中的坐标 (79,250) = 0,那会是什么对应于“真实”尺寸。基本上是各种坐标变换。
    • @curiousgeorge 是的,所以在上述解决方案中,您可以将 xq 和 yq 更改为您想要查询的任何点,这应该可以正常工作。
    猜你喜欢
    • 2016-07-19
    • 2012-05-04
    • 2023-03-22
    • 2014-09-16
    • 1970-01-01
    • 2013-09-26
    • 2011-03-23
    • 1970-01-01
    • 2021-08-09
    相关资源
    最近更新 更多