4

我需要找到两条线的交点之间的像素值。下图显示了我想要的点,即棕色区域。

这4个坐标可以改变,不一定是角点。

在此处输入图像描述

获取像素值的最快方法是什么?有什么功能可以给我必要的面具。

4

3 回答 3

6

您应该计算每个点,无论它是在线上方还是下方。如果这条线是以方程形式给出的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
于 2012-11-06T12:31:35.610 回答
1

这是几何解决方案,而不是解析解决方案。

首先,您需要构建一个蒙版图像,最初用全零填充。然后你应该使用Bresenham's algorithm绘制两条线。Matlab 中没有默认实现,但您可以在Matlab Central中选择一个。我假设,你有与图像边界线的交点坐标。

之后,您的图像被分成四个区域,您需要使用bwfill填充其中两个区域。现在你有了面具。

于 2012-11-06T05:58:54.467 回答
0

您可以从生成两个具有 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 被归一化,可以通过添加线宽的一半来控制线宽。

于 2012-11-06T05:49:29.757 回答