Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 两条相交线之间的像素_Matlab_Math_Image Processing_Computational Geometry - Fatal编程技术网

Matlab 两条相交线之间的像素

Matlab 两条相交线之间的像素,matlab,math,image-processing,computational-geometry,Matlab,Math,Image Processing,Computational Geometry,我需要找到两条线的交点之间的像素值。下图显示了我想要的点,即棕色区域 这4个坐标可以改变,不一定是角点 获取像素值的最快方法是什么?是否有任何函数可以为我提供必要的掩码。您可以从生成两个具有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

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

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


获取像素值的最快方法是什么?是否有任何函数可以为我提供必要的掩码。

您可以从生成两个具有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 或者不带逻辑表达式:mask=mod(diag1+diag2,2)*top\u mask*bot\u mask


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

这里是几何解,而不是解析解

首先,您需要构造一个掩码图像,最初用全零填充。然后,您应该使用绘制两条线。Matlab中没有默认的实现,但您可以随时选择一个。我假设,你有线与图像边界交点的坐标


之后,您的图像被划分为四个区域,您需要使用洪水填充其中两个区域。现在你有了遮罩。

你应该计算每个点,无论它是在直线上方还是下方。如果直线是以方程形式给出的,
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
函数CreateMask()
行数=100;
cols=200;
[X,Y]=ndgrid(1:cols,1:rows);
以下第一行=X*(1/列)+Y*(-1/行)+0<0;
以下第二行=X*(-1/列)+Y*(-1/行)+1<0;
图形imshow(转置(xor(belowSecondLine,belowFirstLine));
结束

您是否始终希望区域位于一条线下方,另一条线上方?一条线左边和另一条线右边的区域是什么;这些也在线条之间。线条总是图像的对角线吗?不一定有效:在退化情况下,泛光填充不一定只找到一个或两个要填充的像素(不一定是连在一起的。而且这个答案假设点至少在边上,最后我怀疑迭代方法真的比矩阵快。