diff --git a/4/1.py b/4/1.py new file mode 100644 index 0000000..42c1feb --- /dev/null +++ b/4/1.py @@ -0,0 +1,23 @@ +import cv2 as cv +import numpy as np +from matplotlib import pyplot as plt + +image = cv.imread("images/lena.png") +gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) +gray = np.float32(gray) + +block_size = 2 +sobel_size = 3 +k = 0.04 + +corners_img = cv.cornerHarris(gray, block_size, sobel_size, k) # type: ignore + +indices = np.argsort(corners_img.flatten())[::-1][:50] +coords = np.column_stack(np.unravel_index(indices, corners_img.shape)) +for coord in coords: + cv.circle(image, (coord[1], coord[0]), 3, (255, 0, 0), 1) + +plt.imshow(image) +plt.axis("off") +plt.tight_layout() +plt.show() diff --git a/4/2.py b/4/2.py new file mode 100644 index 0000000..ce9614a --- /dev/null +++ b/4/2.py @@ -0,0 +1,23 @@ +import cv2 as cv +import numpy as np + +img = cv.imread("images/lena.png") +cv.imshow("raw_img", img) + +gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) +gray = np.float32(gray) + +J = (0.05, 0.01, 0.005) + +for j in J: + dst = cv.cornerHarris(gray, 2, 3, 0.04) # type: ignore + a = dst > j * dst.max() + for r in range(a.shape[0]): + for c in range(a.shape[1]): + if a[r, c] != 0: + cv.circle(img, (c, r), 1, (0, 0, 255), 1) + cv.imshow("corners_" + str(j), img) + cv.waitKey(0) + +cv.waitKey(0) +cv.destroyAllWindows() diff --git a/4/3.py b/4/3.py new file mode 100644 index 0000000..18a51fc --- /dev/null +++ b/4/3.py @@ -0,0 +1,43 @@ +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()