Координаты вершин изоповерхности MATLAB соответствуют объему

У меня есть вопрос относительно функции изоповерхности MATLAB.

Допустим, у меня есть маска (черно-белый объем), представляющая объект 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);

person user1384636    schedule 08.05.2015    source источник


Ответы (1)


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

IDX = find(B);
[X,Y,Z] = ind2sub(size(B), IDX);
coords = [Y,X,Z];
person user1384636    schedule 10.05.2015