【问题标题】:MATLAB interpolation and sorting points help required需要 MATLAB 插值和排序点帮助
【发布时间】:2012-11-19 16:56:29
【问题描述】:

我现在不得不使用 MATLAB 进行图像处理。但我对 MATLAB 几乎一无所知,这可能是我唯一一次使用 MATLAB(我希望如此)。所以我想得到你的帮助。这是我到目前为止所做的:

我成功地从 .trk 文件中读取了数据并解析了它的标题和正文。现在我必须应用插值。在此之前,这里是关于我的变量的信息:

我有tracks <1x110470 struct>。在轨道结构下,我有两个向量。它们是nPointsmatrixnPoints 包含向量matrix 中存在的点数。

例如,如果我选择轨道(1,95607),nPoints=3 和 matrix={(1.2323,1.4441,2.345),(2.333,4.555,4.123),(1.22,2.33,3.44)}

nPoints 不是一个固定的数字。它甚至可以是 100 等。但矩阵是一个 nPoints*3 向量。我总是有 3 个坐标。

现在我要做的是一个基本的插值,比如取一半的边界并添加新的点。让我假设,在轨道(1,2)下我有三个点 a,b,c,d 然后我需要添加点 (a+b)/2 和 (b+c)/2 和 (c+d)/ 2.

首先,我什至无法编写一个成功的算法来做到这一点。请你帮助我好吗? (插值将应用于所有轨道。但我不会在轨道(1,1)和轨道(1,2)之间进行任何插值,我只会将它应用于轨道内的点,而且轨道中的点是未排序。)

其次,我想知道的是:是否有可能拥有一种进行参数化插值的算法。我的意思是:

假设我的观点是:a,b

如果参数=1,那么我只想添加 (a+b)/2

如果参数=2,那么除了参数=1

.. .. ..

我希望它像那样迭代。有可能吗?

我已经编码了几个小时,现在我开始感到筋疲力尽。我将非常感谢您的帮助。

亲切的问候, 艾玛迪斯

【问题讨论】:

  • 你看过help cell
  • 尽量简明扼要一点,你会有更多机会得到一个好的答案——请注意,人们正在从列表中挑选答案..(只关注你想问的问题,你的问题。)
  • @BarnabasSzabolcs 对我来说最重要的是第二个问题:参数化插值。你有什么想法吗?
  • @Amadeus 关键是,你有一个插值的东西,你已经得到了一个和你的问题一样模糊的答案。一旦你明确了你真正想要实现的目标,我认为你可以通过一些基本的矩阵运算得到一个简单的解决方案。然后我(和许多其他人)可以很容易地帮助解决这个“简单的解决方案”。
  • @BarnabasSzabolcs 我正在尝试创建大脑的神经图,向量matrix 中的那些点是神经元轨迹通过的点。但是,当我将它们可视化时,我注意到它们不够浓缩。有时,在特定的神经元轨道上会发生断开连接。因此,我决定使用插值来获得更好的可视化效果。但是我没有决定要进行多少插值。因此,如果可以的话,我想让这个过程参数化。你可以帮帮我吗? (如果我的答案仍然不清楚,我很抱歉。)

标签: matlab image-processing interpolation


【解决方案1】:

我真的无法弄清楚你真正想要什么“参数化插值”,我把我的最佳猜测放在这里。

我猜你想在某个时候进行[a b c d] -> [a (a+b)/2 b (b+c)/2 c (c+d)/2 d] 转换,可能需要多次迭代。

对于这个问题,我的解决方案是

ret = function interp(v, rounds)
    n=length(v);
    avg = (v(1:n-1)+v(2:n))./2;
    temp = [v(1:n-1); avg];
    ret = [temp(:), v(n)];
    if rounds>1
        ret = interp(ret, rounds-1);
    end
end

[a b c d] -> [a (a+b)/2 b (b+c)/2 c (c+d)/2 d] 转换由
interp([a b c d], 1) 给出。

其他示例:interp([1 2], 2) -> [1 1.25 1.5 1.75 2]

【讨论】:

    【解决方案2】:

    查看Signal Processing 和官方的 Matlab 帮助 (F1)。

    【讨论】: