Этот пример будет похож на от Amro, но это немного другая реализация, которая должна работать для произвольной системы координат, назначенной изображению ...
Предположим, что у вас есть матрицы регулярно расположенных x и y координат, которые имеют тот же размер, что и ваше изображение, так что координаты пикселя (i,j)
задаются как (x(i,j),y(i,j))
. В качестве примера я создам примерный набор целочисленных координат 5 на 5, используя MESHGRID :
>> [xGrid,yGrid] = meshgrid(1:5)
xGrid =
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
yGrid =
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
Далее мы можем определить линию y = m*(x - a) + b
, проходящую через систему координат, выбрав некоторые значения для констант и вычислив y
с использованием координат x сетки:
>> a = 0;
>> b = 1;
>> m = rand
m =
0.5469
>> y = m.*(xGrid(1,:)-a)+b
y =
1.5469 2.0938 2.6406 3.1875 3.7344
Наконец, мы находим точки y в сетке, которые отличаются от точек, вычисленных выше, меньше размера сетки:
>> index = abs(yGrid-repmat(y,size(yGrid,1),1)) <= yGrid(2,1)-yGrid(1,1)
index =
1 0 0 0 0
1 1 1 0 0
0 1 1 1 1
0 0 0 1 1
0 0 0 0 0
и используйте эту индексную матрицу, чтобы получить координаты x и y для пикселей, пересекаемых линией:
>> xCrossed = xGrid(index);
>> yCrossed = yGrid(index);