Если вы действительно хотите, чтобы диагонали были точно под углом 45 градусов, а ваши пиксели были квадратными (безопасное предположение для большинства стандартных камер), то вам не нужно делать какие-либо преобразования координат, я не думаю. Вы можете использовать тот факт, что все точки вдоль диагоналей имеют вид, например, I(ix, ix), I(1 + ix, ix)
. Определить границы немного сложно. Попробуйте это для "столбца" (диагональ от верхнего левого до нижнего правого) сумм, начиная с нижнего левого, продвигаясь вверх по левому краю, затем через верх:
I = eye(5, 4);
I(4, 1) = 1;
[nrows, ncols] = size(I);
colsums = zeros(nrows + ncols - 1, 1);
% first loop over each row in the original image except the first one
for ix = nrows : -1 : 2,
JX = [0 : min(nrows - ix, min(nrows-1, ncols-1))];
for jx = JX,
colsums(nrows - ix + 1) = colsums(nrows - ix + 1) + I(ix + jx, jx + 1);
end
end
% then loop over each column in the original image
for ix = 1 : ncols,
JX = [0 : min(nrows - ix - 1, min(nrows-1, ncols-1))];
for jx = JX,
colsums(nrows + ix - 1) = colsums(nrows + ix - 1) + I(1 + jx, ix + jx);
end
end
Обратите внимание, что если расстояние имеет для вас значение (звучит так, как будто это не так), то расстояния вдоль этих диагоналей на sqrt(2)/2
больше.