Координаты вершин изоповерхностей 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);
1 ответ
Я выяснил, в чем была проблема. А именно, координаты X и Y из ind2sub необходимо поменять местами.
IDX = find(B);
[X,Y,Z] = ind2sub(size(B), IDX);
coords = [Y,X,Z];