Координаты вершин изоповерхностей 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];
Другие вопросы по тегам