Mathematica와 함께 Waldo를 어떻게 찾습니까?


1542

이것은 주말 동안 나를 괴롭 혔습니다. Waldo는 어디에 있습니까? [ 북미 이외의 'Wally' ] Mathematica (이미지 처리 및 기타 기능)를 사용하는 퍼즐?

여기 내가 지금까지 가지고있는 것, 빨간색이 아닌 색상 중 일부를 흐리게하여 시각적 복잡성을 약간 줄이는 기능입니다.

whereIsWaldo[url_] := Module[{waldo, waldo2, waldoMask},
    waldo = Import[url];
    waldo2 = Image[ImageData[
        waldo] /. {{r_, g_, b_} /;
          Not[r > .7 && g < .3 && b < .3] :> {0, 0,
          0}, {r_, g_, b_} /; (r > .7 && g < .3 && b < .3) :> {1, 1,
          1}}];
    waldoMask = Closing[waldo2, 4];
    ImageCompose[waldo, {waldoMask, .5}]
]

그리고 이것이 작동하는 URL의 예 :

whereIsWaldo["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"]

(왈도는 금전 등록기입니다) :

원본 이미지

매스 매 티카 그래픽


31
@yoda-왼쪽 상단, 테이블 구석 근처에 신발이 많은 테이블, 금전 등록기 및 Waldo.
Arnoud Buzing

8
컴퓨터 비전의 박사 과정 학생으로서 저는이 장면을 보여주고 싶은 유혹을 느낍니다.하지만 저항해야합니다. 가치 있는 일 을 위해이 영향력있는 작업 (경고 : pdf) 에서와 같이 방향 그라디언트의 히스토그램 + 슬라이딩 창 SVM으로 가겠습니다 .
dimatura

54
" 월리는 어디에 있나 ." >. <
궤도에서 가벼움

2
다른 언어도 지원하도록 질문을 변경할 수 있습니까? Matlab
Andrey Rubshtein

2
@ArnoudBuzing : 귀하의 질문에, 가장 흰색이있는 선택을 보면 Waldo를 찾을 수 있습니다. : /
Tamara Wijsman

답변:


1640

왈도를 찾았습니다!

왈도 발견

어떻게했는지

먼저, 빨간색이 아닌 모든 색상을 걸러냅니다

waldo = Import["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"];
red = Fold[ImageSubtract, #[[1]], Rest[#]] &@ColorSeparate[waldo];

다음으로 셔츠에서 빨간색과 흰색 전환을 찾기 위해 간단한 흑백 패턴으로이 이미지의 상관 관계를 계산합니다.

corr = ImageCorrelate[red, 
   Image@Join[ConstantArray[1, {2, 4}], ConstantArray[0, {2, 4}]], 
   NormalizedSquaredEuclideanDistance];

내가 사용 Binarize충분히 높은 상관 관계를 사용하여 이미지의 픽셀을 선택하고 사용을 강조하기 위해 주위에 흰색 원을 그립니다Dilation

pos = Dilation[ColorNegate[Binarize[corr, .12]], DiskMatrix[30]];

나는 레벨에서 조금 놀아야했다. 레벨이 너무 높으면 너무 많은 오 탐지가 선택됩니다.

마지막 으로이 결과를 원본 이미지와 결합하여 위의 결과를 얻습니다.

found = ImageMultiply[waldo, ImageAdd[ColorConvert[pos, "GrayLevel"], .5]]

52
@MikeBantegui Heike의 솔루션은 훌륭하지만 WhereIsWaldo일반적인 솔루션이 아니기 때문에 함수 로 패키지화하는 것은 그리 빠르지 않습니다. 헤이 크 자신은 긍정적 인 결과를 얻기 전에 레벨을 다룰 필요가 있다고 지적했다. 무슨 뜻인지 알기 위해 패키지 기능을 사용해보십시오 "http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/AtTheBeach.jpg".이 기능은 더 어렵습니다.
abcd

17
이 이미지는 까다 롭습니다 : 왈도 . 나는 잠재적 인 Waldos을 강조 할 수있는 무언가를 가지고하는 것은 여전히 유용하다는 것을, 그러나 생각 (일부 정의 '유용'.) (이 아이 포토는 때때로 우리의 포토 컬렉션에서 얼굴로 식별 할 수있는 몇 가지 생각 나게 ...)
브렛 챔피언

33
이 메타 포스트를 참조하십시오 : meta.stackexchange.com/questions/116401/…
Bill the Lizard

155
당신은 왈도의 규칙을 잘못 이해 한 것 같습니다. 이것은 분명히 부정 행위입니다.
Stefan Kendall

91
이것은 좋은 해킹이지만 작동하지 않습니다. 수동 조정이 필요하며 하나의 이미지에서만 작동합니다. 왜 이것이 반박되고 답으로 선택되었는지 이해하지 못합니다. 그것은 더 나은 작업 방법으로 대답하려고 시도하는 다른 사람들을 방해합니다.
sam hocevar

144

는 "이 작업을 수행하는 방탄 방법"에 내 생각은 (CIA 스트라이프 셔츠와 같은 요소를 경쟁없이 위성 영상에 언제든지, 단지 하나의 이미지를 왈도를 찾는 생각) ... 나는 훈련 것 볼츠만 기계를 왈도의 많은 이미지에 -앉거나 서 있거나 폐색 된 그의 모든 변형; 셔츠, 모자, 카메라 및 모든 작품. 큰 규모의 Waldos 모음이 필요하지는 않지만 (3-5 정도면 충분 함) 더 좋습니다.

이것은 올바른 배열이 무엇이든 발생하는 다양한 요소에 확률의 구름을 할당 한 다음 평균 객체 크기가 무엇인지 (세그먼트 화를 통해) 소스 이미지를 개별 사람들과 가장 유사한 객체의 셀로 조각화합니다 (가능한 폐색을 고려하고 변경 사항을 포즈합니다) ), 그러나 Waldo 사진에는 일반적으로 거의 같은 규모의 사람들이 많이 포함되어 있기 때문에 이것은 매우 쉬운 작업이어야하며 사전 훈련 된 Boltzmann 기계 의이 세그먼트에 공급하십시오. 각각의 왈도 일 가능성이 있습니다. 확률이 가장 높은 것을 복용하십시오.

오늘날 OCR, 우편 번호 리더 및 획없는 필기 인식이 작동하는 방식입니다. 기본적으로 당신은 답이 있다는 것을 알고, 그것이 어떻게 생겼는지 알고, 다른 모든 것에는 공통 요소가있을 수 있지만 확실히 "그렇지 않습니다", "그렇지 않다"를 귀찮게하지 않습니다. 예를 들어, 우편 번호에서 BM을 1 초, 2 초, 3 초 등으로 훈련시킨 다음 각각을 먹이십시오. 각 머신에 숫자를 입력하고 가장 신뢰하는 머신을 선택하십시오.) 이것은 모든 숫자의 단일 신경망 학습 기능보다 훨씬 효과적입니다.


13
평범한 신경망만으로는 충분하지 않습니까? 게다가 위키 백과 기사는 볼츠만 기계가 실용적이지 않다고 주장합니다.
GClaramunt

2
시도하지 않고 확실하지 않지만 충분히 크고 복잡한 경우 신경망이 충분해야합니다. 특히 반복되는 경우. Boltzmann 기계는 자체적으로 달리 데이터 바다에서 많은 양의 노이즈로 상당히 단순한 데이터 세트를 인식하는 데 매우 매우 효과적입니다.
Gregory Klopper

14
우편 번호는 Boltzmann 기계로 항상 읽히고 메일 배달의 정확성은 지붕을 통과했습니다.
Gregory Klopper

47

@GregoryKlopper에 동의합니다 . 임의의 이미지에서 Waldo (또는 관심있는 대상)를 찾는 일반적인 문제를 해결 하는 올바른 방법은 감독되는 기계 학습 분류기를 훈련시키는 것입니다. 많은 양수 및 음수 레이블이 지정된 예제를 사용하면 Support Vector Machine , Boosted Decision Stump 또는 Boltzmann Machine 과 같은 알고리즘 을 사용 하여이 문제에 대한 정확성을 높일 수 있습니다. Mathematica는 이러한 알고리즘을 기계 학습 프레임 워크에 포함 합니다.

Waldo 분류기를 훈련시키는 데있어 두 가지 과제는 다음과 같습니다.

  1. 올바른 이미지 기능 변환 결정 이것은 @Heike의 대답이 유용한 곳입니다. 빨간 필터와 스트리핑 패턴 검출기 (예 : 웨이블릿 또는 DCT 분해)는 원시 픽셀을 분류 알고리즘이 배울 수있는 형식으로 바꾸는 좋은 방법입니다. 이미지의 모든 하위 섹션을 평가하는 블록 기반 분해도 필요하지만 ... Waldo는 a) 항상 거의 같은 크기이며 b) 각 이미지에서 항상 정확히 한 번만 존재한다는 사실로 인해 더 쉬워졌습니다.
  2. 충분한 훈련 예를 얻는 것. SVM은 각 클래스의 최소 100 개의 예에서 가장 잘 작동합니다. 부스팅 (예 : 디지털 카메라의 얼굴 포커싱)의 상용 응용 프로그램은 수백만 건의 긍정적 및 부정적 사례에 대한 교육을 받았습니다.

Google 이미지를 빠르게 검색하면 좋은 데이터가 나타납니다. 지금은 몇 가지 교육 예제를 수집하여 코드를 작성해 보겠습니다.

그러나 기계 학습 접근법 (또는 @iND가 제안한 규칙 기반 접근법) 조차도 Waldos Land 와 같은 이미지를 위해 어려움을 겪을 것입니다 !


작년에 컴퓨터 비전 및 패턴 인식 컨퍼런스에서 실제 세계에서 "Where 's Waldo"문제를 해결하려고하는 머신 러닝 기반 컴퓨터 비전 시스템 (즉, Flickr에서 군중 사진에서 특정 인물을 찾는 것)이 발표되었습니다. 그들은 같은 장면의 여러 사진을 사용하여 3D 위치 정보를 추가하여 약간의 부정 행위를합니다.
lubar

41

나는 Mathematica를 모른다. . . 너무 나쁘다. 그러나 나는 위의 답변을 대부분 좋아합니다.

여전히 답을 얻기 위해 줄무늬 에만 의존하는 데 큰 결함이 있습니다 (개인적으로 하나의 수동 조정에 문제가 없습니다 ). 셔츠 패턴이 때때로 깨지는 것을 보여주는 예제 ( 여기 Brett Champion에 의해 등재 됨 )가 제시되어 있습니다. 따라서 더 복잡한 패턴이됩니다.

나는 공간적 관계와 함께 모양의 id와 색상의 접근을 시도 할 것입니다. 얼굴 인식과 마찬가지로 특정 비율의 기하학적 패턴을 찾을 수 있습니다. 주의 할 점은 일반적으로 이러한 모양 중 하나 이상이 가려져 있다는 것입니다.

이미지에서 화이트 밸런스를 얻고 이미지에서 레드 밸런스를 빨간색으로 만듭니다. Waldo는 항상 같은 값 / 색조라고 생각하지만 이미지가 스캔되었거나 잘못된 사본 일 수 있습니다. 그런 다음 항상 Waldo가 실제로 빨간색, 흰색, 짙은 갈색, 파란색, 복숭아, {구두 색}의 색상 배열을 참조하십시오.

셔츠 패턴과 Waldo를 정의하는 바지, 안경, 머리카락, 얼굴, 신발 및 모자가 있습니다. 또한 이미지의 다른 사람들과 비교하여 Waldo는 마른쪽에 있습니다.

따라서이 그림에서 사람들의 키를 얻으려면 임의의 사람들을 찾으십시오. 이미지의 임의의 지점에서 여러 물건의 평균 높이를 측정하십시오 (단순한 윤곽선으로 인해 많은 사람들이 생길 수 있습니다). 각 것이 서로 표준 편차 내에 있지 않으면 지금은 무시됩니다. 높이의 평균을 이미지의 높이와 비교하십시오. 비율이 너무 크면 (예 : 1 : 2, 1 : 4 또는 이와 비슷하게) 다시 시도하십시오. 표준 편차를 벗어난 평균을 제외하고 10 (?) 번 반복하여 표본이 모두 서로 가깝게 있는지 확인하십시오. Mathematica에서 가능합니까?

이것은 당신의 왈도 크기입니다. Walso는 마른 체형이므로 5 : 1 또는 6 : 1 (또는 무엇이든) ht : wd를 찾고 있습니다. 그러나 이것으로는 충분하지 않습니다. Waldo가 부분적으로 숨겨져 있으면 높이가 변경 될 수 있습니다. 그래서, 당신은 ~ 2 : 1의 적 백색 블록을 찾고 있습니다. 그러나 더 많은 지표가 있어야합니다.

  1. 왈도에는 안경이 있습니다. 적 백색 위의 0.5 : 1 원 2 개를 검색합니다.
  2. 파란 바지. 적 백색의 끝과 발까지의 거리 사이의 거리 내에서 동일한 너비의 파란색. 그는 셔츠를 짧게 입어서 발이 너무 가까이 있지 않습니다.
  3. 모자. 머리 위쪽의 최대 두 배까지 거리는 적 백색입니다. 아래에 검은 머리가 있고 안경일 것입니다.
  4. 긴 소매. 주 적 백색에서 일정 각도로 적 백색.
  5. 검은 머리.
  6. 신발 색. 나는 색깔을 모른다.

그중 하나라도 적용 할 수 있습니다. 이것들은 또한 그림에서 비슷한 사람들에 대한 부정적인 점검입니다. 또한 모양은 이러한 각 테스트마다 하나의 지표입니다. . . 지정된 거리 내의 색상만으로도 좋은 결과를 얻을 수 있습니다.

처리 할 영역이 좁아집니다.

이러한 결과를 저장하는 것은 지역의 집합 생산할 예정 한다 그것에서 왈도을 가지고 있습니다. 다른 모든 영역을 제외하고 (예 : 각 영역에 대해 평균 사람 크기의 두 배 큰 원을 선택) @Heike가 빨간색을 제외한 나머지를 모두 제거하여 배치 한 프로세스를 실행하십시오.

이것을 코딩하는 방법에 대한 생각이 있습니까?


편집하다:

이것을 코딩하는 방법에 대한 생각. . . 왈도 레드 이외의 모든 영역을 제외하고, 레드 영역을 골격 화하고 단일 지점까지 프룬합니다. 왈도 머리 갈색, 왈도 바지 파란색, 왈도 신발 색상에 대해서도 동일하게 수행하십시오. Waldo 피부색의 경우 제외하고 윤곽선을 찾으십시오.

다음으로, 빨간색이 아닌 것을 제외하고 모든 빨간색 영역을 확장 한 다음 골격 화하고 정리합니다. 이 부분은 가능한 Waldo 중심점 목록을 제공합니다. 다른 모든 Waldo 색상 섹션을 비교하는 마커가됩니다.

여기에서 골격 화 된 빨간색 영역 (확장 영역이 아닌)을 사용하여 각 영역의 선 수를 계산하십시오. 정확한 숫자가 있다면 (4, 맞습니까?) 이것은 확실히 가능한 영역입니다. 그렇지 않다면, 나는 그것을 제외시킬 것입니다 (Waldo 센터 .... 그것이 여전히 그의 모자 일 수 있습니다).

그런 다음 위의 얼굴 모양, 위의 헤어 포인트, 아래의 바지 포인트, 아래의 구두 포인트 등이 있는지 확인하십시오.

아직 코드가 없습니다. 여전히 문서를 읽고 있습니다.


8
아마도 어떤 시스템 / 언어에 익숙한 개념 증명을 보여줄 수 있습니다. 이것은 또한 어려움이 올 수있는 곳에 대한 느낌을 줄 것입니다.
Szabolcs

1
오, 난 그냥 도전을 즐기고 있습니다. 그것은 해변 산책과 저녁 식사 드레싱 사이에 할 일이 있습니다.
iND

1
그래서. . . 왜 downvotes? 여기서 다른 추측 답과 다른 점은 무엇입니까? 이것이이 질문을 더 심각하게 받아 들여야한다는 제안입니까? 아니면 내가 조사에서 더 진지해 보일까? 내 접근 방식이 실제로 잘못 되었습니까?
iND

3
나는 당신을 공감하지 않았으며, 공감자가 정직한 대답을하기에 적합하지 않다고 생각합니다. downvotes의 가장 가능성이 높은 이유는 당신이 (아주 복잡한 소리를내는) 접근법을 시도하지 않은 것처럼 보였으며, 좋은 해결책을 찾으려면 많은 양의 실용적인 실험과 많은 아이디어를 배제해야 할 것입니다. 다른 추론 적 대답은 과거에 비슷한 문제에 사용 된 일반적인 방법 (시작점으로)을 암시하며 이에 관한 문헌이 많이 있습니다. 무슨 일이 있었는지 설명하려고 노력했습니다.
Szabolcs

설명 주셔서 감사합니다. 아이디어의 역사에 집중하고 있지 않은 것 같습니다.
iND

2

OpenCV를 사용하여 Waldo를 찾는 빠른 솔루션이 있습니다.

내가 사용하는 템플릿 매칭 왈도을 찾기 위해 OpenCV의에서 사용할 기능을.

이를 위해서는 템플릿이 필요합니다. 그래서 원래 이미지에서 Waldo를 자르고 템플릿으로 사용했습니다.

여기에 이미지 설명을 입력하십시오

다음으로 나는 cv2.matchTemplate()함수와 함께 사용 된 방법으로 정규화 된 상관 계수 . 아래의 흰색 (왼쪽 위 영역)에 표시된 것처럼 단일 영역에서 높은 확률을 반환했습니다.

여기에 이미지 설명을 입력하십시오

가장 가능성이 높은 영역의 위치는 cv2.minMaxLoc()함수를 사용하여 찾은 다음 Waldo를 강조 표시하기 위해 사각형을 그리는 데 사용되었습니다.

여기에 이미지 설명을 입력하십시오


7
SO의 가장 유명한 이미지 처리 문제를 해결하려고 노력하고 있습니까? ;) 귀하의 솔루션은 훌륭하고 쉽지만 a /이 특정 이미지에서만 작동하고 b / 당신이 미리 찾고 싶은 Waldo의 정확한 이미지가 필요합니다. 당신은 정상적인 게임을 할 것입니다 : 그가 미리 어떻게 생겼는지 모릅니다. 이 질문은 어쨌든 많은 재미입니다
Soltius

@Solitus ha 정확히 !!! 나는 특히이 이미지에서만 일했습니다. 다른 이미지를 위해 작업하는 것은 도전이 될 것입니다 !!
Jeru Luke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.