2012-11-19 1 views
-1

Мне пришлось использовать MATLAB для обработки изображений сейчас. Но я почти ничего не знаю о MATLAB, и, вероятно, это будет единственный раз, когда я буду использовать MATLAB (надеюсь). Поэтому я хотел принять вашу помощь. Вот что я сделал до сих пор:Требуется интерполяция и сортировка точек MATLAB

Я успешно прочитал datum из файла .trk и проанализировал его заголовок & body. Теперь я должен применить интерполяцию. До этого, вот информация о моих переменных:

У меня есть tracks <1x110470 struct>. В структуре треков у меня есть два вектора. Это nPoints и matrix. nPoints включает число точек в векторе matrix.

Например, если выбрать дорожки (1,95607), NPOINTS = 3 и матрица = {(1.2323,1.4441,2.345), (2.333,4.555,4.123), (1.22,2.33,3.44)}

n Очки не являются фиксированным числом. Это может быть даже 100 и т. Д. Но матрица - это вектор nPoints*3. У меня всегда есть 3 координаты.

Теперь мне нужно сделать базовую интерполяцию, например, взять половину границ и добавить новые точки. Предположим, что по трекам (1,2) у меня есть три точки a, b, c, d, тогда мне нужно добавить точки (a + b)/2 и (b + c)/2 и (c + d)/2.

Прежде всего, я не мог даже написать успешный алгоритм, который делает это. Не могли бы вы мне помочь? (Интерполяция будет применяться ко всем трекам, но я не буду делать интерполяцию, например, между дорожками (1,1) и треками (1,2). Я буду применять ее только к точкам внутри дорожек, а также, точки в дорожках не отсортировано.)

Во-вторых, мне было интересно, есть ли у него алгоритм, который выполняет параметризованную интерполяцию. То, что я имею в виду:

Предположим, что мои точки: а, б

Если параметр = 1, то я хочу только добавить (а + б)/2

Если параметр = 2, то я хочу Кроме того, чтобы иметь (а + (а + б)/2)/2 и ((а + б)/2) + B)/2, в дополнение к параметрам, когда параметр = 1

.. .. . .

Я хочу, чтобы это было итеративным. Является ли это возможным?

Это были часы, которые я кодирую, и теперь я начал истощаться. Я буду очень благодарен за вашу помощь.

С наилучшими пожеланиями, Amadeus

+0

Вы заглянули в 'help cell' –

+0

попытайтесь быть немного более краткими и лаконичными, у вас будет больше шансов на хороший ответ - обратите внимание, что люди выбирают ответы из списка .. (просто сосредоточьтесь на том, что вы хотите спросить, ваша проблема.) –

+0

@BarnabasSzabolcs, что для меня наиболее важно, это второй вопрос: параметризованная интерполяция. У вас есть идея? – Xentius

ответ

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