44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
import cv2 as cv
|
|
|
|
|
|
def build_gaussian_pyramid(image, octaves, scales):
|
|
gaussian_pyramid = []
|
|
for o in range(octaves):
|
|
octave_images = []
|
|
for s in range(scales):
|
|
if s == 0:
|
|
if o == 0:
|
|
octave_images.append(image)
|
|
else:
|
|
octave_images.append(cv.pyrDown(gaussian_pyramid[o - 1][-3]))
|
|
else:
|
|
sigma = 1.6 * (2 ** (s / scales))
|
|
blurred = cv.GaussianBlur(octave_images[0], (5, 5), sigma)
|
|
octave_images.append(blurred)
|
|
|
|
gaussian_pyramid.append(octave_images)
|
|
return gaussian_pyramid
|
|
|
|
|
|
def build_dog_pyramid(gaussian_pyramid):
|
|
dog_pyramid = []
|
|
for octave in gaussian_pyramid:
|
|
dog_images = []
|
|
for s in range(len(octave) - 1):
|
|
dog_images.append(octave[s + 1] - octave[s])
|
|
dog_pyramid.append(dog_images)
|
|
return dog_pyramid
|
|
|
|
|
|
image = cv.imread("images/lena.jpg", cv.IMREAD_GRAYSCALE)
|
|
guassian_pyramid = build_gaussian_pyramid(image, octaves=4, scales=5)
|
|
dog_pyramid = build_dog_pyramid(guassian_pyramid)
|
|
|
|
for i in range(len(dog_pyramid)):
|
|
for j in range(len(dog_pyramid[i])):
|
|
cv.namedWindow("DoG pyramid image %d %d" % (i, j))
|
|
cv.imshow("DoG pyramid image %d %d" % (i, j), dog_pyramid[i][j])
|
|
|
|
cv.waitKey(0)
|
|
cv.destroyAllWindows()
|