Найти верхнюю поверхность твердого объекта в Matlab - PullRequest
0 голосов
/ 16 октября 2018

У меня есть двоичная сегментация твердого объекта в массиве Matlab 3D, которая называется mask (1000x1000x1000 uint16).Мне нужно извлечь верхнюю поверхность, т. Е. Первый ненулевой элемент для каждого вектора столбца (по второму и третьему измерениям).Я могу сделать это с помощью следующего фрагмента кода:

s = zeros(1000,1000); 
for y=1:1000
    for x=1:1000
        s(x,y) = find(mask(:,x,y),1);
    end 
end

Есть ли способ векторизовать код и избежать циклов for?

1 Ответ

0 голосов
/ 16 октября 2018

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

[~, ind] = max(mask); 
s = squeeze(ind);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...