0
哈里斯角落探測器哈里斯角落探測器python
我想執行哈里斯角探測器與python的方法,但我卡住請給一些建議。 ,我已經實現的方法可以發現HERE
import numpy as np
import matplotlib.pyplot as plt
from PIL.Image import *
import scipy
from scipy import ndimage, signal
def conv2(x, y, mode='same'):
return np.rot90(signal.convolve2d(np.rot90(x, 2), np.rot90(y, 2), mode=mode), 2)
def harris(im):
l, c = im.size
k = 0.04
imarr = np.asarray(im, dtype=np.float64)
dx = np.array([[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]], dtype=np.float64)
dy = dx.transpose()
mat3x3 = np.array([[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]], dtype=np.float64)
for i in range(0, (c-3), 2):
for j in range(0, (l-3), 2):
mat3x3[0, 0] = imarr[i, j]
mat3x3[0, 1] = imarr[i, j+1]
mat3x3[1, 0] = imarr[i, j+2]
mat3x3[1, 1] = imarr[i+1, j]
mat3x3[1, 1] = imarr[i+1, j+1]
mat3x3[0, 0] = imarr[i+1, j+2]
mat3x3[0, 0] = imarr[i+2, j]
mat3x3[0, 0] = imarr[i+2, j+1]
mat3x3[0, 0] = imarr[i+2, j+2]
Ix = conv2(mat3x3, dx, mode='same')
Iy = conv2(mat3x3, dy, mode='same')
Ix2 = Ix * Ix
Iy2 = Iy * Iy
Ixy = Ix * Iy
Sx2 = conv2(mat3x3, Ix2, mode='same')
Sy2 = conv2(mat3x3, Iy2, mode='same')
Sxy = conv2(mat3x3, Ixy, mode='same')
Hxy = [[Sx2, Sxy], [Sy2, Sxy]]
R = np.linalg.det(Hxy) - k*(np.power((np.linalg.eig(Hxy)), 2))
# print(R[0, 0])
if(R[0, 0] > 0):
imarr[i, j] = 127
imarr[i, j+1] = 127
imarr[i, j+2] = 127
imarr[i, j+3] = 127
imarr[i+1, j] = 127
imarr[i+1, j+1] = 127
imarr[i+1, j+2] = 127
imarr[i+1, j+3] = 127
imarr[i+2, j] = 127
imarr[i+2, j+1] = 127
imarr[i+2, j+2] = 127
imarr[i+2, j+3] = 127
imarr[i+3, j] = 127
imarr[i+3, j+1] = 127
imarr[i+3, j+2] = 127
imarr[i+3, j+3] = 127
return imarr
im = open('chess.png')
em = harris(im)
plt.imshow(em, 'gray')
plt.show()
那就是我想要做的爲例:harris exempe
想出了在PIL的解決方案? –