Files
2024-09-25 15:33:34 +08:00

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()