我需要找到2行交叉点之间的像素值。下图显示了我想要的点,即棕色区域。
这4个坐标可以改变,但不一定是角点。
获取像素值的最快方法是什么?是否有任何功能可以给我必要的面具。
答案 0 :(得分:6)
您应该计算每个点,无论是在线上还是在线以下。如果该行以其等式形式Ax+By+C
给出,那么就像根据您的点(x,y)
计算此表达式的符号一样简单。如果您的行以任何其他形式给出,您应首先计算上面的表格。 (请参阅here和here)
让L1
成为第一行下方所有点的集合,L2
成为第二行下方所有点的集合。然后,您的设置为X = Xor(L1,L2)
[ ] Xor [ ]
<强>等于:强>
这是一个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'加到线宽的一半来控制线宽。