두 선의 교차점 사이에있는 픽셀 값을 찾아야합니다. 다음 이미지는 내가 원하는 지점, 즉 갈색 영역을 보여줍니다.두 개의 교차하는 선 사이의 픽셀
이러한 4 개의 좌표는 변경 될 수 있으며 꼭 꼭지점은 아닙니다.
픽셀 값을 얻을 수있는 가장 빠른 방법은 무엇입니까? 필요한 마스크를 줄 수있는 기능이 있습니까?
두 선의 교차점 사이에있는 픽셀 값을 찾아야합니다. 다음 이미지는 내가 원하는 지점, 즉 갈색 영역을 보여줍니다.두 개의 교차하는 선 사이의 픽셀
이러한 4 개의 좌표는 변경 될 수 있으며 꼭 꼭지점은 아닙니다.
픽셀 값을 얻을 수있는 가장 빠른 방법은 무엇입니까? 필요한 마스크를 줄 수있는 기능이 있습니까?
각 점에 대해 줄 위 또는 아래에 있는지 계산해야합니다. 그 라인이 방정식 형태 Ax+By+C
으로 주어진다면,이 표현식의 부호를 계산하는 것만 큼 간단합니다. (x,y)
. 당신의 라인이 다른 형태로 주어지면, 먼저 위의 폼을 계산해야합니다.
하자가 첫 번째 줄 아래에있는 모든 점들의 집합 L1
(here 및 here 참조), 및 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
넌 X & Y 두 행렬 생성으로 시작 좌표 : 다음 하나 4 개 마스크에 X *는 + Y의 * B를 < C 변환 4 개 라인 방정식 필요
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
: 대각선해야 XORED 및 위쪽/아래쪽 마스크 ANDED
a와 b가 정규화되었다고 가정하면 선 폭의 'c'에 선의 폭을 더하여 제어 할 수 있습니다.
여기에는 분석적 솔루션이 아니라 기하학적 솔루션이 있습니다.
먼저 마스크 이미지를 구성해야합니다. 처음에는 모두 0으로 채워집니다. 그런 다음 Bresenham's algorithm을 사용하여 두 줄을 모두 그려야합니다. Matlab에는 기본 구현이 없지만 Matlab Central에서 하나를 선택할 수 있습니다. 이미지 테두리가있는 선과 교차하는 좌표가 있다고 가정합니다.
그런 다음 이미지가 4 개의 영역으로 나누어지고 bwfill을 사용하여 이미지를 두 개 채워야합니다. 그리고 지금 당신은 마스크를 가지고 있습니다.
반드시 작동하지 않아도됩니다. 축축한 경우에 플러드 채우기가 반드시 채워질 단 하나 또는 두 개의 픽셀을 찾을 필요는 없습니다 (꼭 연결할 필요는 없습니다.) 또한이 대답은 포인트가 있다고 가정합니다. 적어도 반복적 접근법이 행렬보다 실제로 빠르다는 것을 의문의 여지가 있습니다. –
모든 점에 동의하십시오. – Mikhail
항상 한 줄 아래의 영역과 다른 영역보다 위의 영역을 원하십니까? 한 라인의 왼쪽과 다른 라인의 오른쪽은 어떨까요? 그것들은 또한 라인 사이에있다. – Isaac
갈색 영역을 원합니다 ... – anon
선은 항상 이미지의 대각선입니까? – Junuxx