Pixels between 2 intersecting lines

老子叫甜甜 提交于 2019-12-23 15:29:47

问题


I need to find pixel values that are between the intersection of 2 lines. The following image shows the points that I want namely the brown region.

These 4 co-ordinates can change and are not necessarily the corner points.

What is the fastest way to get the pixel values ? Is there any function that can give me the necessary mask.


回答1:


You should calculate for each point, whether it is above the line or below. If the line is given in its equation form Ax+By+C, then it is as simple as calculating the sign of this expression, per your point (x,y). If your lines are given in any other form, you should first calculate the form above. (See here and here)

Let L1 be the set of all points below the first line, and L2 the set of all points below the second line. Then, your set is X = Xor(L1,L2)

[

] Xor [

]

Equals:

Here is a Matlab code that solves you problem for the corner points, based on the solution that I've described. You can adjust the line equations in your code.

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



回答2:


Here is geometrical, rather than analytic solution.

First, you need to construct a mask image, initially filled with all zeroes. Then you should draw both lines using Bresenham's algorithm. There is no default implementation in Matlab, but you can pick one at Matlab Central. I assume, you have coordinates of intersections of the lines with image borders.

After that your image is divided into four areas and you need to flood-fill two of them using bwfill. And now you have the mask.




回答3:


You can start with generating two matrices with x & y coordinates:

 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  

Then one needs 4 line equations that convert x*a + y*b < c into 4 masks: diagonals have to be XORED and top/bottom masks ANDED
or without logical expressions: mask=mod(diag1+diag2,2)*top_mask*bot_mask;

The line width can be controlled by adding to 'c' half of the line width, assuming that a and b are normalized.



来源:https://stackoverflow.com/questions/13245012/pixels-between-2-intersecting-lines

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!