我需要找到两条线的交点之间的像素值。下图显示了我想要的点,即棕色区域。
这4个坐标可以改变,不一定是角点。
获取像素值的最快方法是什么?有什么功能可以给我必要的面具。
我需要找到两条线的交点之间的像素值。下图显示了我想要的点,即棕色区域。
这4个坐标可以改变,不一定是角点。
获取像素值的最快方法是什么?有什么功能可以给我必要的面具。
您应该计算每个点,无论它是在线上方还是下方。如果这条线是以方程形式给出的Ax+By+C
,那么它就像根据你的观点计算这个表达式的符号一样简单(x,y)
。如果你的行以任何其他形式给出,你应该首先计算上面的形式。(见这里和这里)
设L1
为第一条线以下所有L2
点的集合,以及第二条线以下所有点的集合。那么,你的设置是X = Xor(L1,L2)
[ ] 异或 [ ]
等于:
这是一个 Matlab 代码,它根据我描述的解决方案为您解决角点问题。您可以调整代码中的线方程。
function CreateMask()
rows = 100;
cols = 200;
[X,Y] = ndgrid(1:cols,1:rows);
belowFirstLine = X*(1/cols) + Y*(-1/rows) + 0 < 0;
belowSecondLine = X*(-1/cols) + Y*(-1/rows) + 1 < 0;
figure;imshow( transpose(xor(belowSecondLine,belowFirstLine)));
end
这是几何解决方案,而不是解析解决方案。
首先,您需要构建一个蒙版图像,最初用全零填充。然后你应该使用Bresenham's algorithm绘制两条线。Matlab 中没有默认实现,但您可以在Matlab Central中选择一个。我假设,你有与图像边界线的交点坐标。
之后,您的图像被分成四个区域,您需要使用bwfill填充其中两个区域。现在你有了面具。
您可以从生成两个具有 x 和 y 坐标的矩阵开始:
1 2 3 4 5 1 1 1 1 1
1 2 3 4 5 vs. 2 2 2 2 2 sized as the region
1 2 3 4 5 3 3 3 3 3
然后需要 4 行方程将 x*a + y*b < c 转换为 4 个掩码:对角线必须是 XORED 和顶部/底部掩码 ANDED
或没有逻辑表达式: mask=mod(diag1+diag2,2)*top_mask*机器人掩码;
假设 a 和 b 被归一化,可以通过添加线宽的一半来控制线宽。