我现在必须使用MATLAB进行图像处理。但我几乎不知道MATLAB的任何内容,它可能是我唯一一次使用MATLAB(我希望)。所以我想接受你的帮助。以下是我到目前为止所做的事情:
我成功地从.trk文件中读取了数据并解析了它的标题和正文。现在我必须应用插值。在此之前,这是有关我的变量的信息:
我有tracks <1x110470 struct>
。在轨道结构下,我有两个向量。它们是nPoints
和matrix
。 nPoints
包含向量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 / p>
.. .. ..
我希望它像那样迭代。有可能吗?
我编码好几个小时,现在我开始筋疲力尽了。我将非常感谢你的帮助。
亲切的问候, Amadeus的
答案 0 :(得分: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)
- &gt; [1 1.25 1.5 1.75 2]
。
答案 1 :(得分:0)
查看Signal Processing和官方Matlab帮助(F1)。