2015-05-08 5 views
0

У меня вопрос относительно функции изоповерхности MATLAB.Координаты вершин вершин верных точек MATLAB с объемом

Предположим, что у меня есть маска (объем bw), представляющая объект A, и поверхность (вершины и грани), представляющие объект B. Мы знаем, что объект A и объект B представляют собой другое представление одного и того же объекта. Поэтому мы хотим их зарегистрировать.

Теперь алгоритм регистрации возвращает некоторое преобразование T, начиная с начального предположения T '. вручную оценить первоначальное предположение, что я делаю следующее:

[f1,v2] = loadGraphicalTemplate(B); 
[f2,v2] = isosurface(mask); % aka object A 
v2 = transformPointsForward(InitialGuess,v2); 
labels = (zeros(length(v1),1)'; ones(length(v2),1)'); 
showMesh([f1;f2], [v1;v2], labels); 

где начальное предположение является аффинной матрицей, я вручную модифицированным, пока обе поверхности не почти перекрывается. На этом этапе появляется алгоритм регистрации и делает все остальное.

Проблема в том, что когда я применяю преобразование к облаку точек (генерируемому из объекта B, см. Код ниже), результат не имеет никакого смысла! Это похоже на то, что матрица преобразования была случайно сформирована!

%% coordinates of non zero elements 
IDX = find(B); 
[X,Y,Z] = ind2sub(size(B), IDX); 
coords = [X,Y,Z]; 

%% values of non zero elements 
linB = B(:); 
vals = linB(IDX); 

%% transformation 
coords = transformPointsForward(T,coords); 

ответ

0

Я выяснил, в чем была проблема. А именно, координаты X и Y из ind2sub должны быть заменены.

IDX = find(B); 
[X,Y,Z] = ind2sub(size(B), IDX); 
coords = [Y,X,Z]; 
Смежные вопросы