Мне не совсем ясна ваша цель, но вот один из способов извлечь диагонали изображения RGB (диагональ 2D-матриц для каждого цветового канала):
A = rand(32,32,3); %# it can be any 3D matrix (and not necessarily square)
[r c d] = size(A);
diagIDX = bsxfun(@plus, 1:r+1:r*c, (0:d-1)'.*r*c);
A( diagIDX(:) )
diagIDX
будет иметь три строки, каждая из которых содержит (линейные) индексы диагональных элементов (по одному для каждого среза). Оттуда вы можете адаптировать его под свой код ...
Идея приведенного выше кода проста: возьмите 2D-матрицу, к диагональным элементам можно получить доступ с помощью:
A = rand(5,4);
[r c] = size(A);
A( 1:r+1:r*c )
затем в трехмерном случае я добавляю дополнительное смещение для достижения других срезов таким же образом.