!mv ~/Desktop/coke.jpg .
matplotlib.rc("image",cmap="gray")
matplotlib.rc("image",interpolation="nearest")
from scipy.ndimage import filters,morphology
from scipy.ndimage.filters import gaussian_filter as G
image = zeros((300,320))
image[120:180,100:150] = 1
image[120:180,170:220] = 1
imshow(image)
<matplotlib.image.AxesImage at 0x1fea62d0>
for i,s in enumerate(exp(linspace(log(1.0),log(100.0),9))):
subplot(3,3,i+1); axis("off"); imshow(G(image,s,mode='constant'))
signal = zeros(200)
signal[80:100] = 1.0
signal[105:130] = 1.0
signal[145:147] = 1.0
for s in [1.0,3.0,10.0,30.0]:
plot(G(signal,s))
points = []
for s in linspace(1.0,50.0,1000):
lp = filters.gaussian_filter(signal,s)
chg = logical_and(lp>roll(lp,-1),lp>roll(lp,1))
points += [(x,s) for x in find(chg)]
points = array(points)
xlim(0,200)
plot(points[:,0],points[:,1],'b.')
[<matplotlib.lines.Line2D at 0x32e23090>]
impulse = zeros((100,100))
impulse[50,50] = 1.0
subplot(121); imshow(filters.gaussian_laplace(impulse,7.0)); title("LoG")
subplot(122); imshow(G(impulse,10.0)-G(impulse,5.0)); title("DoG")
<matplotlib.text.Text at 0x210c8290>
image = mean(imread("coke.jpg"),2)
imshow(image)
<matplotlib.image.AxesImage at 0x72f65d0>
imshow(G(image,5.0)-G(image,7.0))
<matplotlib.image.AxesImage at 0x72dc110>
scales = exp(linspace(log(1.0),log(30.0),9))
pyramid = array([G(image,s) for s in scales])
for i,image in enumerate(pyramid):
subplot(3,3,i+1); axis("off"); imshow(image)
subplot(131); imshow(pyramid[1]-pyramid[0])
subplot(132); imshow(pyramid[5]-pyramid[4])
subplot(133); imshow(pyramid[8]-pyramid[7])
<matplotlib.image.AxesImage at 0xbfb5050>
dpyramid = filters.gaussian_filter(pyramid,(0,0,1),(0,0,1))
subplot(121); imshow(dpyramid[1]); print amax(dpyramid[1])
subplot(122); imshow(dpyramid[7]); print amax(dpyramid[7])
39.933210478 2.07013638757
scale = argmax(dpyramid,axis=0)
imshow(scale)
<matplotlib.image.AxesImage at 0x2232eb50>
locmax = [d==filters.maximum_filter(d,s) for d,s in zip(dpyramid,scales)]
subplot(121); imshow(locmax[3])
subplot(122); imshow(locmax[7])
<matplotlib.image.AxesImage at 0x2d0db1d0>
Selection of keypoints:
Invariances:
The localization of keypoints attempts to be invariant to:
Now we want:
Keypoint descriptor: