Вы можете векторизовать код:
lines=[0,0,0,0,0,0; %# lines for example
0,0,1,2,3,0;
0,3,4,5,0,0];
lines(:,:,2)=[0,0,0,0,0,0;
0,0,0,0,0,0;
0,0,0,0,0,0];
bool_mask = double(lines ~= 0);
bool_mask(bool_mask == 0) = NaN; %# for later min function
[row_grid, col_grid] = ndgrid(1:size(lines,1), ...
1:size(lines,2), ....
1:size(lines,3));
min_row = squeeze(min(min(row_grid .* bool_mask,[],1)));
max_row = squeeze(max(max(row_grid .* bool_mask,[],1)));
min_col = squeeze(min(min(col_grid .* bool_mask,[],2)));
max_col = squeeze(max(max(col_grid .* bool_mask,[],2)));
slope = (max_row-min_row)./(max_col-min_col);
slope(isnan(slope)) = 0; %# x/0 is NaN, and absent line is NaN. Turn to 0.
slope
Дает вывод:
slope =
0.3333
0