62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
"""
|
|
Abhängigkeiten:
|
|
- cv2 (OpenCV-Paket)
|
|
- numpy
|
|
|
|
Autor: Roberto Gelsinger
|
|
Datum: 07.12.2023
|
|
Version: Modulversion
|
|
"""
|
|
|
|
import cv2
|
|
import numpy as np
|
|
|
|
|
|
def build_gaussian_pyramid(img, levels):
|
|
"""
|
|
Erstellt eine Gaußsche Pyramide für ein gegebenes Bild.
|
|
|
|
Diese Funktion nimmt ein Bild und die gewünschte Anzahl von Ebenen und erstellt eine Gaußsche Pyramide.
|
|
Eine Gaußsche Pyramide ist eine Sammlung von Bildern, die bei jeder Ebene halbiert werden.
|
|
|
|
Args:
|
|
img (ndarray): Das Eingabebild.
|
|
levels (int): Die Anzahl der Ebenen in der Pyramide.
|
|
|
|
Returns:
|
|
list: Eine Liste von Bildern, die die Ebenen der Gaußschen Pyramide darstellen.
|
|
"""
|
|
float_img = np.ndarray(shape=img.shape, dtype="float")
|
|
float_img[:] = img
|
|
pyramid = [float_img]
|
|
|
|
for i in range(levels-1):
|
|
float_img = cv2.pyrDown(float_img)
|
|
pyramid.append(float_img)
|
|
|
|
return pyramid
|
|
|
|
def build_video_pyramid(frames):
|
|
"""
|
|
Erstellt eine Video-Pyramide, indem für jeden Frame eine Laplace-Pyramide erstellt wird.
|
|
|
|
Für jeden Frame des Eingabevideos wird eine Gaußsche Pyramide erstellt, und diese Pyramiden werden
|
|
zu einer Video-Pyramide zusammengesetzt.
|
|
|
|
Args:
|
|
frames (list of ndarray): Eine Liste von Frames, die das Video darstellen.
|
|
|
|
Returns:
|
|
list: Eine Liste von Pyramiden, jede repräsentiert einen Level der Video-Pyramide.
|
|
"""
|
|
lap_video = []
|
|
|
|
for i, frame in enumerate(frames):
|
|
pyramid = build_gaussian_pyramid(frame, 3)
|
|
for j in range(3):
|
|
if i == 0:
|
|
lap_video.append(np.zeros((len(frames), pyramid[j].shape[0], pyramid[j].shape[1], 3)))
|
|
lap_video[j][i] = pyramid[j]
|
|
|
|
return lap_video
|