나는 이미지 모자이크를 만들면서 놀고 있습니다. 내 스크립트는 많은 수의 이미지를 가져 와서 축소판 크기로 축소 한 다음 대상 이미지와 비슷한 타일로 사용합니다.
이 접근법은 실제로 매우 즐겁습니다.
모든 타일 위치의 모든 엄지 손가락에 대한 평균 제곱 오류를 계산합니다.
처음에는 욕심 많은 배치를 사용했습니다. 가장 적합한 타일에 엄지 손가락을 넣고 그다음에 다음과 같이하십시오.
욕심 많은 문제는 가장 인기있는 타일에 가장 다른 엄지 손가락을 배치하는 것입니다. 나는 여기에 예를 보여줍니다 : http://williamedwardscoder.tumblr.com/post/84505278488/making-image-mosaics
그런 다음 스크립트가 중단 될 때까지 임의의 스왑을 수행합니다. 결과는 아주 좋습니다.
두 타일의 랜덤 스왑이 항상 개선되는 것은 아니지만 때로는 세 개 이상의 타일이 회전하면 전체적으로 개선됩니다. 즉 A <-> B
, 개선되지 않을 A -> B -> C -> A
1
수도 있지만 ..
이러한 이유로 두 개의 임의 타일을 선택하고 개선되지 않는 것을 발견 한 후에는 이러한 회전에서 세 번째 타일이 될 수 있는지 평가하기 위해 타일을 선택합니다. 4 개의 타일 세트가 수익성있게 회전 할 수 있는지 여부는 탐색하지 않습니다. 그것은 곧 매우 비싸다.
그러나 이것은 시간이 걸린다. 많은 시간!
더 좋고 빠른 접근 방법이 있습니까?
바운티 업데이트
헝가리어 메소드 의 다양한 Python 구현 및 바인딩을 테스트했습니다 .
순수한 파이썬 https://github.com/xtof-durr/makeSimple/blob/master/Munkres/kuhnMunkres.py 가 가장 빠릅니다.
내 직감은 이것이 최적의 대답에 가깝다는 것입니다. 테스트 이미지에서 실행하면 다른 모든 라이브러리가 결과에 동의했지만이 kuhnMunkres.py는 수십 배 빠르지 만 다른 구현에서 동의 한 점수와 매우 근접했습니다.
속도는 데이터에 매우 의존적입니다. 모나리자는 13 분 만에 kuhnMunkres.py를 돌파했지만 스칼렛 체스트 잉꼬는 16 분이 걸렸습니다.
결과는 잉꼬에 대한 무작위 스왑 및 회전과 거의 동일합니다.
(왼쪽의 kuhnMunkres.py, 오른쪽의 임의 스왑; 비교를위한 원본 이미지 )
그러나 내가 테스트 한 Mona Lisa 이미지의 경우 결과가 눈에 띄게 개선되었으며 실제로 그녀는 정의 된 '미소'를 통해 빛났습니다.
(왼쪽의 kuhnMunkres.py, 오른쪽의 임의 스왑)