CSL_Project / models /lancros_interpolation.py
R2454's picture
Added Multiple things
32e0f95
raw
history blame
2.38 kB
import cv2
import numpy as np
def upsample_lancros(image_x,scale=4):
h, w = image_x.shape[:2]
new_w, new_h = int(w * scale), int(h * scale)
# Upsample using Lanczos interpolation
pred = cv2.resize(image_x, (new_w, new_h), interpolation=cv2.INTER_LANCZOS4)
return pred
# def lanczos_kernel(x, a):
# """Lanczos kernel function."""
# if x == 0:
# return 1
# elif -a < x < a:
# return a * np.sinc(x) * np.sinc(x / a)
# else:
# return 0
# def upsample_lancros_2(image, scale=4, a=3):
# """
# Upsample an image using Lanczos interpolation.
# Parameters:
# image: numpy array (grayscale or RGB)
# scale: scaling factor (default 4x)
# a: size of Lanczos window (default 3)
# Returns:
# Upsampled image as numpy array.
# """
# if image.ndim == 2: # Grayscale
# h, w = image.shape
# channels = 1
# else: # RGB
# h, w, channels = image.shape
# new_h, new_w = int(h * scale), int(w * scale)
# output = np.zeros((new_h, new_w, channels)) if channels > 1 else np.zeros((new_h, new_w))
# for y_new in range(new_h):
# for x_new in range(new_w):
# print(y_new,x_new)
# # Map new pixel to original image space
# x_orig = x_new / scale
# y_orig = y_new / scale
# x0 = int(np.floor(x_orig))
# y0 = int(np.floor(y_orig))
# # Accumulators
# pixel = np.zeros(channels) if channels > 1 else 0.0
# norm = 0.0
# for j in range(y0 - a + 1, y0 + a + 1):
# for i in range(x0 - a + 1, x0 + a + 1):
# if 0 <= i < w and 0 <= j < h:
# wx = lanczos_kernel(x_orig - i, a)
# wy = lanczos_kernel(y_orig - j, a)
# weight = wx * wy
# if channels > 1:
# pixel += image[j, i] * weight
# else:
# pixel += image[j, i] * weight
# norm += weight
# if norm > 0:
# output[y_new, x_new] = pixel / norm
# if channels == 1:
# output = output.astype(image.dtype)
# else:
# output = output.clip(0, 255).astype(image.dtype)
# return output