최고의 "버킷 필"알고리즘은 무엇입니까?


16

저는 이미지 처리를 처음 접했고 현재 버킷 채우기 기능이있는 페인트 같은 응용 프로그램을 만들고 있습니다. 그러나 버킷 채우기에 가장 적합한 알고리즘이 무엇인지 알 수 없습니다.

이 사이트 에서 찾은 예를 구현 했지만 사용자가 동일한 색상으로 이미 버킷으로 채워진 영역을 버킷 채울 때 무한 루프 문제가 발생했습니다.

나는 현재 왼쪽, 오른쪽, 위, 아래로 채우 면서이 문제를 해결하고 있습니다. 그러나 픽셀이 왼쪽으로 채워지면 오른쪽으로 채울 수 없으므로 다음과 같은 모양을 의미합니다.

예

버킷 도구를 빨간색 점에 사용하면 제대로 채워지지 않습니다.

따라서 누군가가 알고리즘이 나이 모든 문제를 해결할 알고리즘에 대한 링크를 알고 있기를 바랍니다.

추가 정보 : 페인트 도구로 Javascript를 사용하여 구현됩니다. Canvas 요소를 사용하여 온라인으로 사용됩니다.


이 벡터 또는 비트 맵을 기반으로합니까? 이미지로 비트 맵을 가정하고 있지만 확실하게 확인하십시오.
Demian Brecht

1
뭔가 잘못 구현했다고 생각합니다. 나는 문서를 감추었 고 이미지 예제에 따르면 위와 같은 이미지를 채워야합니다. 그의 코드를 복사하여 붙여 넣었습니까, 아니면 다시 쓰셨습니까?
RLH

그래프 탐색을 생각하십시오.
Bwmat

@ RLH : 설정에서 작동하도록 몇 가지 변경 사항으로 코드를 복사하여 붙여 넣었습니다.
Ivan

@Ivan : "무한 루프"문제가 해결되기 전에 새로운 알고를 찾기 시작하지 마십시오. 기존 구현의 경우이를 고칠 수 없다면 전체를 처음부터 다시 작성할 때 훨씬 더 많은 문제가 발생합니다.
Doc Brown

답변:


21

실제로 홍수 채우기 알고리즘을 찾는 것처럼 들립니다. 그렇기 때문에 많은 사례를 찾지 못한 것 같습니다. 알고리즘 에 대한 Wikipedia 페이지 에는 여러 가지 Flood Fill 메소드가 나열되어 있습니다. 비재 귀적, '큐잉 된'방법 중 하나를 적극 권장합니다.


I highly recommend one of the non-recursive, 'queued' methods.-이유를 설명해 주시겠습니까?
Elfayer

1
@Elfayer 함수가 호출 될 때마다 (예 : "X ()"에 "Y ()"가 호출 됨) 시작 함수의 매개 변수와 메모리 위치 ( "X ()")가 스택에 저장됩니다. 따라서 크고 복잡한 공간을 채우는 경우 많은 재귀 함수 호출이 있습니다. 컴파일러와 언어에 따라 스택 오버플로나 과도한 메모리 소비가 발생할 수 있습니다.
boxcartenant

-1

나는 현재 같은 일을하고 있습니다. 그러나 내가 지적한 문제에 부딪쳤을 때 도구를 페인트하려고하는 동일한 색상 영역을 클릭하면 기능을 끝내는 것을 선택했습니다 (이것은 ms-paint의 동작 인 것 같습니다) .

대기열에있는 방법은 프로그래밍 경험이있는 사람에게는 매우 직관적이어야합니다.

페인트와 같은 색의 점을 둘러싼 영역을 페인트하는 것이 문제가되는 경우 다음을 수행 할 수 있습니다.

  • 배경색을 확인하십시오.
  • 클릭 한 같은 색 점의 가장자리를 검색하십시오.
  • 주변 지점을 그 자리에 대기시킵니다.
  • 이 (이 경우) 흰색으로 채워진 대기열을 사용하여 정상적인 실행을 진행하십시오.

원하는 경우 여기 에서 내 (아주 창피한) 코드를 볼 수 있습니다 .

빠르지는 않지만 멀리 작동합니다 ...


왜 다운 보트인가? :(이 방법은 특히 "빠른"것은 아니지만 작동하며 제안 된 해결책도 수행합니다. (
Juan Pablo Alvarez Alfaro

1
이 게시물은 읽기 어렵습니다 (텍스트의 벽). 더 나은 형태로 편집 하시겠습니까 ?
gnat

2
진심이야? 읽기 어려워서 사람들이 투표에 참여 했습니까? 왜 편집을 선택하지 않습니까? 내용에 문제가있는 것은 아닙니다.
l46kok

1
@ l46kok '무언가를
gnat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.