아래와 같이 주어진 도면에 Label을 도면 상의 다른 객체들과 겹쳐지지 않게 배치하고자 할때 White Space 검색이 필요합니다.
먼저 도면의 모든 객체들을 포함하는 Bounding Box를 구합니다.
이 Bounding Box 안에 Label을 배치한다고 가정하겠습니다.
도면 상의 객체의 Bounding Box를 구해 도면의 Bounding Box안에 배치시킵니다.
그리고 배치하려는 Label의 Bounding Box를 구한 다음 Label을 배치할 위치를 찾을 Search Bounding Box를 설정합니다.
일반적으로 Label을 가지는 객체의 Bounding Box의 비율로 Search Bounding Box를 구합니다.(물론 도면 전체 Bounding Box가 될 수도 있습니다.)
라인 넘버의 경우 Search Bounding Box를 파이프 길이 방향으로 길게 생성하면 될것 같습니다.
Search Bounding Box안에서 Label을 X,Y로 조금씩 이동(δt)하면서 Score를 구합니다.
$\delta t$의 크기가 작을 수록 Label을 배치할 위치의 정밀도가 높아지지만 위치를 찾는데 걸리는 시간을 길어집니다.
overlap area는 사각형들이(Label과 여러 객체들이 동시에 겹쳐질수 있음) 겹쳐지는 영역을 구하면 됩니다.
Label을 회전할 필요가 있으면 회전한 Bounding Box를 구하여 Search Bounding Box안에서 Score를 구합니다.
구한 Score 중에서 가장 작은 Score의 위치가 Label을 배치할 위치가 됩니다.
배치 완료된 Label은 도면의 객체에 추가됩니다.
위 내용을 이미지로 치환하면 overlap 영역을 구하는 것은 label의 bounding box에 포함되는 픽셀의 수를 구하면 됩니다.
먼저 도면의 모든 객체들을 포함하는 Bounding Box를 구합니다.
이 Bounding Box 안에 Label을 배치한다고 가정하겠습니다.
도면 상의 객체의 Bounding Box를 구해 도면의 Bounding Box안에 배치시킵니다.
그리고 배치하려는 Label의 Bounding Box를 구한 다음 Label을 배치할 위치를 찾을 Search Bounding Box를 설정합니다.
일반적으로 Label을 가지는 객체의 Bounding Box의 비율로 Search Bounding Box를 구합니다.(물론 도면 전체 Bounding Box가 될 수도 있습니다.)
라인 넘버의 경우 Search Bounding Box를 파이프 길이 방향으로 길게 생성하면 될것 같습니다.
Search Bounding Box안에서 Label을 X,Y로 조금씩 이동(δt)하면서 Score를 구합니다.
- Score = distance * distance factor + overlap area ∗ overlap area factor
- distance = 밸브의 원점과 Label 위치와의 거리
- distance factor = distance가 score에 미치는 영향
- overlap area = label의 bounding box가 도면 상의 객체와 겹치는 영역
- overlap area factor = overlap area가 score에 미치는 영향
구한 Score 중에서 가장 작은 Score의 위치가 Label을 배치할 위치가 됩니다.
- Score가 작음 : 도면의 다른 객체와 겹쳐지지 않으면서 원점과 가장 가까운 위치
위 내용을 이미지로 치환하면 overlap 영역을 구하는 것은 label의 bounding box에 포함되는 픽셀의 수를 구하면 됩니다.
댓글
댓글 쓰기