이것은 최선의 해결책은 아니지만 그건 솔루션입니다. 더 나은 기술을 배우고 싶습니다.
회전하거나 크기를 조정하지 않을 경우 이미지의 간단한 상호 상관을 사용할 수 있습니다. 큰 이미지에서 작은 이미지가 발생할 때마다 밝은 피크가 나타납니다.
FFT 방법을 사용하여 상호 상관의 속도를 높일 수 있지만 작은 소스 이미지를 큰 대상 이미지와 일치시키는 경우 무차별 강제 곱셈 및 추가 방법이 더 빠를 수도 있습니다.
출처:
목표:
상호 상관 :
두 개의 밝은 점은 일치하는 위치입니다.
그러나 당신은 어떻게 그 자체로 작동하지 않습니다, 그래서 당신의 예제 이미지 회전 매개 변수가 있습니다. 스케일링이 아닌 회전 만 허용되는 경우에도 상호 상관을 사용할 수 있지만 상호 상관, 소스 회전, 전체 대상 이미지와 상호 상관, 다시 회전 등을 수행해야합니다. 모든 회전.
이것은 반드시 이미지를 찾을 필요는 없습니다. 소스 이미지가 랜덤 노이즈이고 대상이 랜덤 노이즈 인 경우 정확히 직각으로 검색하지 않으면 이미지를 찾을 수 없습니다. 일반적인 상황에서는 아마도 찾을 수 있지만 이미지 속성과 검색 각도에 따라 다릅니다.
이 페이지 는 수행 방법의 예를 보여 주지만 알고리즘은 제공하지 않습니다.
합계가 임계 값을 초과하는 오프셋은 일치합니다. 소스 이미지를 자신과 연관시키고 모든 합계를이 숫자로 나누어서 일치의 양호도를 계산할 수 있습니다. 완벽하게 일치하는 것은 1.0입니다.
이것은 계산적으로 매우 무거울 것입니다. 그리고 도트 패턴을 일치시키는 더 좋은 방법이있을 것입니다 (알고 싶습니다).
회색조 및 FFT 방법을 사용하는 빠른 Python 예제 :
from __future__ import division
from pylab import *
import Image
import ImageOps
source_file = 'dots source.png'
target_file = 'dots target.png'
# Load file as grayscale with white dots
target = asarray(ImageOps.invert(Image.open(target_file).convert('L')))
close('all')
figure()
imshow(target)
gray()
show()
source_Image = ImageOps.invert(Image.open(source_file).convert('L'))
for angle in (0, 180):
source = asarray(source_Image.rotate(angle, expand = True))
best_match = max(fftconvolve(source[::-1,::-1], source).flat)
# Cross-correlation using FFT
d = fftconvolve(source[::-1,::-1], target, mode='same')
figure()
imshow(source)
# This only finds a single peak. Use something that finds multiple peaks instead:
peak_x, peak_y = unravel_index(argmax(d),shape(d))
figure()
plot(peak_y, peak_x,'ro')
imshow(d)
# Keep track of all these matches:
print angle, peak_x, peak_y, d[peak_x,peak_y] / best_match
1 색 비트 맵
1 색 비트 맵의 경우 훨씬 빠릅니다. 상호 상관은 다음과 같습니다.
- 대상 이미지 위에 소스 이미지 배치
- 소스 이미지를 1 픽셀 씩 이동
- 비트 AND 모든 겹치는 픽셀
- 모든 1의 합계
- ...
그레이 스케일 이미지를 이진으로 임계 값으로 만든 다음이 작업을 수행하면 충분합니다.
포인트 클라우드
소스와 대상이 모두 도트 패턴 인 경우 더 빠른 방법은 각 도트의 중심을 찾고 (알려진 도트와 한 번 상호 연관시킨 후 피크를 찾음) 포인트 세트로 저장 한 다음 소스를 일치시키는 것입니다. 두 세트에서 가장 가까운 점 사이에서 최소 제곱 오차를 회전, 변환 및 찾아서 대상으로 지정합니다.