两条相交线之间的像素

时间:2012-11-06 05:36:47

标签: matlab math image-processing computational-geometry

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

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

enter image description here

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

3 个答案:

答案 0 :(得分:6)

您应该计算每个点,无论是在线上还是在线以下。如果该行以其等式形式Ax+By+C给出,那么就像根据您的点(x,y)计算此表达式的符号一样简单。如果您的行以任何其他形式给出,您应首先计算上面的表格。 (请参阅herehere

L1成为第一行下方所有点的集合,L2成为第二行下方所有点的集合。然后,您的设置为X = Xor(L1,L2)

[ enter image description here ] Xor [ enter image description here ]

<强>等于:

enter image description here

这是一个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

答案 1 :(得分:1)

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

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

之后,您的图片将分为四个区域,您需要使用bwfill对其中两个区域进行泛洪填充。现在你有了面具。

答案 2 :(得分:0)

你可以从x&amp;生成两个矩阵开始。 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&lt; c成4个面具: 对角线必须是XORED和顶部/底部面罩ANDED
或没有逻辑表达式:mask = mod(diag1 + diag2,2)* top_mask * bot_mask;

假设a和b是标准化的,可以通过将'c'加到线宽的一半来控制线宽。