БПФ для соответствия шаблона - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь реализовать сопоставление шаблонов с помощью FFT Convolution в Python. У меня есть исходное изображение S и шаблонное изображение T, и я пытаюсь найти положение шаблона T на изображении S.

import numpy as np
from scipy import signal
from PIL import Image
from copy import deepcopy
import math

original_image = "Test3/public/set/map.png"
segment = "Test3/public/set/0/0.png"

arrMain = Image.open(original_image, 'r').convert('L')   #converting my image to grayscale
openCVimMain = np.asarray(arrMain)    #2D pixel array of main image

arrSegment = Image.open(segment, 'r').convert('L')
openCVSegment = np.asarray(openCVSegment) #2D pixel array of templateImage

arr = signal.fftconvolve(openCVimMain, openCVSegment, mode='valid')

ind = np.unravel_index(np.argmax(arr, axis=None), arr.shape) #looking for index in matrix with highest coorelation value.

print(ind)

Предыдущий код выдает случайное решение, даже близко не подходящее.

Мой код работает для маленьких матриц. Например:

a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[5,6],[8,9]])

sol = signal.fftconvolve(a, b, mode='valid')
sol
>>array([[ 74., 102.],
   [158., 186.]])

И шаблон наилучшего соответствия здесь находится в позиции (2,2), что является правильным. Почему это не работает для изображений в градациях серого?

Я проверил здесь: Соответствие шаблона с использованием FFT

...