这个例子类似于Amro's,但它是一个稍微不同的实现,应该适用于分配给图像的任意坐标系......
假设您拥有与图像大小相同的规则间隔 x 和 y 坐标矩阵,因此像素(i,j) 的坐标由(x(i,j),y(i,j)) 给出。例如,我将使用 MESHGRID 创建一个示例 5×5 整数坐标集:
>> [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
接下来,我们可以通过为常数选择一些值并使用网格的 x 坐标计算 y 来定义一条穿过坐标系的线 y = m*(x - a) + b:
>> 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);