2013-07-26 1 views
0

Мне было интересно, может ли кто-нибудь помочь мне придумать код для 3D-изображения. Теперь я работаю над этим.Найдите «внешние» элементы, превышающие пороговое значение в 3D-матрице.

У меня есть простой 3D матрицы:

A (:,:, 1) =

0 7 4 
0 32 9 
4 3 1 

A (:,:, 2) =

6 0 4 
3 4 6 
2 3 11 

(:,:, 3) =

12 2 4 
10 20 6 
14 3 2 

Я хотел бы найти те значения, которые больше пороговое значение (например, более сильное, чем 7). Однако мне нужны только те, которые являются внешними элементами, то есть не «центральными» элементами (32 на первом слое матрицы не должны быть отмечены как максимум).

(Я работаю с большой матрицей но я думаю, что как только я смогу сделать это для маленькой 3D-матрицы сверху, это будет не сложно сделать для больших).

Спасибо большого

ответ

1

Попробуйте это:

A = randn(4,4,4); % data. Arbitrary size 
th = 1; % threshold 

ind = find(A>th); 
[x y z] = ind2sub(size(A), ind); 
ext = find((x==1)|(x==size(A,1))|(y==1)|(y==size(A,2))|(z==1)|(z==size(A,3))); 

ind_solution = ind(ext); % linear index of desired values 
solution = A(ind_solution) % desired values 
+0

Я редактировал немного. Можете ли вы попробовать сейчас? Я интерпретирую «экстерьер», означает, что один из субиндексов один или максимум, это то, что вы хотите? –

+0

Хорошо работает, за исключением последнего слоя матрицы (где он принимает некоторые внутренние элементы). Да, «внешний» означает элементы первого и последнего столбца и строки – karl71

+0

Для меня «экстерьер» включает в себя все элементы в первом и последнем слоях. Я рассматриваю 3D-матрицу как куб, а «внешний» означает все шесть лиц, которые вы можете видеть, глядя извне. Если это не то, что вы хотите, можете ли вы объяснить более четко? –

0

Я предполагаю, что вы могли бы извлечь из векторов этих матриц ... так что это вопрос получения внешних векторов и перекручивания корыта их элементов.

Я думаю, что это link поможет вам извлечь вектор.

Смежные вопросы