-1

我现在不得不使用 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时的参数外,我还希望有 (a+(a+b)/2)/2 和 ((a+b)/2)+b)/2

.. .. ..

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

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

亲切的问候,艾玛迪斯

4

2 回答 2

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]

于 2012-11-20T05:06:47.523 回答
0

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

于 2012-11-19T17:03:33.877 回答