es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Redimensionar usando interpolación bilineal en Python.

Estoy tratando de implementar manualmente el redimensionamiento de imágenes utilizando interpolación bilineal.
Lo que tengo hasta ahora es una función para la interpolación en sí misma que parece funcionar bien, pero la función de redimensionamiento parece funcionar correctamente solo en las esquinas:

def interpolación_bilineal(imagen, y, x):
altura = len(imagen)
ancho = len(imagen[0])

x1 = min(math.floor(x), ancho – 1)
y1 = min(math.floor(y), altura – 1)
x2 = min(math.ceil(x), ancho – 1)
y2 = min(math.ceil(y), altura – 1)

a = imagen[y1][x1]
b = imagen[y2][x1]
c = imagen[y1][x2]
d = imagen[y2][x2]

nuevo_píxel = a * (1 – x) * (1 – y)
nuevo_píxel += b * y * (1 – x)
nuevo_píxel += c * x * (1 – y)
nuevo_píxel += d * x * y
return round(nuevo_píxel)
def redimensionar(imagen, nueva_altura, nuevo_ancho):

nueva_imagen = [[0 para _ en el rango(nuevo_ancho)] para _ en el rango(nueva_altura)]

para y en el rango(nueva_altura):
para x en el rango(nuevo_ancho):
x_ = (x / (nuevo_ancho – 1)) * len(imagen[0])
y_ = (y / (nueva_altura – 1)) * len(imagen)

    nueva_imagen[y][x] = interpolación_bilineal(imagen, y_, x_)

return nueva_imagen

Así que para la matriz:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]

Obtuve

[[1, 4], [9, 12], [13, 16]]

en lugar de

[[1, 4], [7, 10], [13, 16]]

Gracias de antemano.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la forma en que estás calculando los valores x_ y y_ en tu función resize. Estás utilizando la relación entre el nuevo ancho / alto y el ancho / alto anterior, pero deberías utilizar la relación entre la posición actual de x / y y el nuevo ancho / alto. Intenta cambiar el cálculo por este:

    x_ = (x / nuevo_ancho) * len(imagen[0])
    y_ = (y / nuevo_alto) * len(imagen)
    

    Esto debería darte el resultado esperado.

Comments are closed.