У меня есть уполномоченный, где мне нужно заново создать функцию интерполяции ближайшего соседа с нуля в python. Я только начал язык несколько дней go, поэтому я пытаюсь написать все маленькие шаги, чтобы достичь этого.
Это моя первая попытка решить его :) Причины этого (например, для данного изображения и масштаба 0,5) для масштабирования позиций X и Y исходного изображения до X 'и Y' следующим образом:
Форма данного изображения: 10x10. Я хочу увеличить его до 5x5 (это уменьшение масштаба)
X и Y перед масштабированием
X = [0,1, 2,3,4,5,6,7,8,9] Y = [0,1,2,3,4,5,6,7,8,9]
X и Y позиции после масштабирования
X '= [0,2.25,4.5,6.75,9] Y' = [0,2.25,4.5,6.75,9]
округлено
X '= [0,2,5,7,9] Y' = [0,2,5,7,9]
Затем я смотрю в пиксели из исходного изображения с использованием этих позиций
Я не знаю, имеет ли это смысл или я что-то упускаю
Мой код (способ, которым я назвал свои переменные, не так отлично)
def interpolation_nn(image, scale):
# saving the type of the image
dtype = image.dtype
#Adding padding to the image
img_p = np.pad(image.astype(np.float32), 1)
# Calculation of the size of the original image and of the interpolated image
#Original img
height,width = image.shape
#interpolated image
Scaled_width = (width * scale)
Scaled_height = (height * scale)
# Calculation of pixel coordinates in the interpolated image
Scaled_X_coordinates=np.linspace(0.0, width, num=Scaled_width)
Scaled_Y_coordinates=np.linspace(0.0, height, num=Scaled_height)
#rounding my positions
Scaled_X_coordinates=np.around(Scaled_X_coordinates)
Scaled_Y_coordinates=np.around(Scaled_Y_coordinates)
#edited
finalMatrix= np.zeros(shape=(np.around(Scaled_height).astype(int) ,np.around(Scaled_width).astype(int)))
pixels=[]
#Here, i store every pixels from the original image using the scaled coordinates
#into an array of pixels
for Line in Scaled_Y_coordinates.astype(int) :
for Column in Scaled_X_coordinates.astype(int):
pixel = img_p[Line,Column]
pixels.append(pixel)
#Here i reconstruct the scaled image using the array of pixels from above
Pixel_counter=0
for i in range(np.around(Scaled_height).astype(int)):
for j in range(np.around(Scaled_width).astype(int)):
finalMatrix[i][j]=pixels[Pixel_counter]
Pixel_counter=Pixel_counter+1
#returning a new matrix with the same type as the given img
return finalMatrix.astype(dtype)
Я понятия не имею, как посмотреть в пиксели исходного изображения, чтобы воссоздать новое с новыми масштабированными позициями. Если что-то неясно, спросите:)