Matlab 两条相交线之间的像素
我需要找到两条线的交点之间的像素值。下图显示了我想要的点,即棕色区域 这4个坐标可以改变,不一定是角点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
获取像素值的最快方法是什么?是否有任何函数可以为我提供必要的掩码。您可以从生成两个具有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假设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));
结束
您是否始终希望区域位于一条线下方,另一条线上方?一条线左边和另一条线右边的区域是什么;这些也在线条之间。线条总是图像的对角线吗?不一定有效:在退化情况下,泛光填充不一定只找到一个或两个要填充的像素(不一定是连在一起的。而且这个答案假设点至少在边上,最后我怀疑迭代方法真的比矩阵快。