Как найти похожие элементы в изображении, используя автокорреляцию в коде Python? - PullRequest
0 голосов
/ 20 октября 2018

Я ищу способ найти похожие элементы в изображении, используя автокорреляцию.Например, я должен показать, что на изображении есть два одинаковых черных квадрата, и я должен отличить его от другого изображения с одним черным квадратом.Я пробовал это с помощью автокорреляции.Таким образом, изображение с двумя одинаковыми черными квадратами должно иметь более высокое число для автокорреляции, чем изображение с одним черным квадратом.Код, который я создал, выглядит следующим образом:

plt.imshow(img);
plt.colorbar()
plt.show()

#autocorrelation
autocorr = scipy.signal.correlate2d(img,img)
print(autocorr)

#plot autocorrelation
plt.imshow(autocorr);
plt.colorbar()
plt.show()

#find max value autocorrelation
maximum=max(map(max, autocorr))
print(maximum)

#quit running if double tip
if maximum > 1e-12:
    print("double tip")
else:
    print ("no double tip")

size=autocorr.size
h=sqrt(size)
half=int(h/2-1/2)
end=int(h+1)

#divide image into 4 quadrants
quadrant11=autocorr[0:half, 0:half] #top left
quadrant21=autocorr[0:half, (half+1):end] #top right
quadrant12=autocorr[(half+1):end, 0:half] #bottom left
quadrant22=autocorr[(half+1):end, (half+1):end] #bottom right

#mirror first quadrant to subtract it from all 4 quadrants 
quadrant11_11=quadrant11 #the same
quadrant11_21=quadrant11[:,::-1] #mirror in y direction
quadrant11_12=quadrant11[::-1] #mirror in x direction
quadrant11_22_x=quadrant11[::-1]; quadrant11_22=quadrant11_22_x[:,::-1]                     #mirror in both x and y direction 

#subtract properly mirrored first quadrant from every quadrant
quadrant11_new=quadrant11-quadrant11_11
quadrant21_new=quadrant21-quadrant11_21
quadrant12_new=quadrant12-quadrant11_12
quadrant22_new=quadrant22-quadrant11_22

left_part=np.concatenate((quadrant11_new, quadrant12_new), axis=0)
right_part=np.concatenate((quadrant21_new, quadrant22_new), axis=0)
total_imageAC=np.concatenate((left_part, right_part), axis=1)

plt.imshow(total_imageAC);
plt.colorbar()
plt.show()

Может кто-нибудь сказать мне, правильно ли я использую автокорреляцию, и если нет, то как мне следует ее исправить.Или если у вас есть другой способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...