2010-11-20 6 views
6

예를 들어 원과 사각형이있는 이미지가 있다고 가정 해 보겠습니다. 이미지의 매트릭스가 주어진 정사각형을 찾는 방법이 있습니까? (단 하나의 사각형이 있으며, 시간은 실제로 문제가되지 않습니다). 감사합니다. .이미지에서 사각형 모양을 찾는 알고리즘?

+1

완벽한 사각형인가, 아니면 "사각형과 같은"입니까? –

+1

사각형입니다. 그러나 그것은 꽤 바닐라입니다. 그것은 MS 그림판 "사각형"도구로 그린 다음 gif로 저장했다고 가정합니다. –

+1

사각형이 축에 정렬되어 있습니까? 회전되어 있습니까? – thejh

답변

3

모든 점을 "밝음"과 "어두운 색"으로 나눕니다.

점등되는 점을 찾고 위아래 점도 점등됩니다. 그것들은 가장자리의 일부가 될 가능성이 있습니다.

마찬가지로 점 (x, y)이 점등되고 점 (x + 1, y), (x + 2, y)도 점등되지만 (x-1, y) 및 (y- , y)가 어둡고 Y 방향과 비슷하다면 가장 왼쪽 상단 구석을 발견했을 것입니다. 등등. 이 방법으로 코너를 찾아서 사각형을 찾을 수 있습니다 - 간단한 접근 방법 인 것 같습니다.

0

이미지의 사각형이 완벽하면 예상되는 위치에 테두리가 있는지 확인하십시오. thejh의 대답에있는 의사 코드는 잘 작동합니다.

+0

고마워, Gintautas. 너 한테 물어서 미안해, 근데 좀 더 공식적으로 할 수 있니? 어떤 수학이나 가짜 코드일까요? 문장을 파싱하는 데 문제가 있습니다. 감사. –

+0

그래, 내 첫 문장이 망가 졌어, 미안. 고정. –

+0

나는 당신의 질문을 오해했는데, 나는 페인트의 "직사각형"도구에서 제공 한 것과 같이 단지 사각형 대신 채워진 사각형을 찾고 있다고 생각했다. 이 경우 솔루션은 훨씬 간단합니다. –

3

이와 비슷한?

box image

for (x,y of every black pixel) { 
#those methods should return true if the lines length is more than one pixel 
if (hasLineToRight(x,y)&&hasLineToBottom(x,y)) { 
    otherx=highestXOfLineToRight(); 
    othery=highestYOfLineToBottom(); 
    if (isLine(x,y,x,othery)&&isLine(x,y,otherx,y)) { 
    addBoxToList(x,y,otherx,othery); 
    } 
} 
} 

당신은 propably 가장 높은 폭과 높이 값으로 상자를 사용하고 싶습니다.

0

사각형을 찾을 때까지 무작위로 시작하는 flood filling은 어떨까요?

관련 문제