¿Cómo una computadora escala la resolución de 1024x768 a 1920x1080?

8

Sin que haya barras negras, quiero decir. 1080 no es ningún múltiplo de 768, ¿hay algún tipo de pérdida de datos?

V0ight
fuente
55
Existen algoritmos de escala como la escala bicúbica que usan splines para aproximar el color de los píxeles cuando se escala a cualquier tamaño.
EvilTak
@EvilTak, ¿puedes ampliar tu comentario en una pequeña respuesta?
glampert
@glampert hizo eso. ¿Quieres que elimine mi comentario?
EvilTak
@EvilTak, creo que puedes dejarlo. Buena respuesta por cierto, gracias!
glampert

Respuestas:

8

En esencia, una imagen es un grupo de muestras puntuales (leer Un píxel no es un pequeño cuadrado 3 ). Cuando transforma o escala la imagen, necesita volver a muestrearla. Entonces, lo que haces, teóricamente, es tomar muestras puntuales y convertirlas en una función continua. Luego muestreas esa función continua y reconstruyes una señal. Entonces, hay dos o tres fases diferentes aquí.

  1. Convirtiendo las muestras a una función continua, (reconstrucción de funciones).
  2. (Transformando)
  3. Re-muestreo de la señal

Tenga en cuenta que ninguno de estos pasos tiene una forma fija. En la práctica, cuando se optimiza, es imposible decir que hay pasos. La transformación en realidad no tiene que ser simple, podría mapear la forma en espiral, etc.

Reconstrucción de señal

Imagen 1 : Una señal 1-D reconstruida por diferentes filtros.

En la práctica, se sabe bastante sobre la reconstrucción de señales en el campo de procesamiento de señales. Diseñar estos filtros y elegir el correcto es una forma de arte en sí misma. Pero, en esencia, la elección del filtro es una compensación entre desenfoque y timbre . Por supuesto, el algoritmo también tiene otras cualidades, como cuántas instrucciones se necesitan para implementar y qué tan rápido y cuánta memoria necesita, etc., lo que puede ser muy importante en aplicaciones integradas o en tiempo real.

El proceso

Imagen 2 : Resumen de todo el proceso.

joojaa
fuente
5

Existen numerosos algoritmos de aumento y reducción de escala disponibles para escalar imágenes desde cualquier resolución a cualquier otra resolución arbitraria. Cada algoritmo generalmente implica una compensación entre eficiencia, suavidad y nitidez, con diversos grados de cada compensación para diferentes algoritmos.

Consulte este artículo de Wikipedia para ver dichos algoritmos y ejemplos de dichos algoritmos.

El algoritmo más popularmente conocido (y utilizado) es el algoritmo de interpolación Bicubic . Se interpola entre puntos 2D en una cuadrícula rectangular. Usando Splines cúbicas (o Interpolación cúbica), primero interpola en una dimensión (encuentra la fila / columna interpolada), luego interpola la fila / columna interpolada en la otra dimensión.

La interpolación bilineal es similar a la interpolación bicúbica, excepto que la primera interpola usando una función lineal y puede interpolar solo entre dos valores y la segunda usa una función cúbica y puede interpolar entre cuatro valores.

La función simple para la interpolación bicúbica es la siguiente:

f(f(p00, p01, p02, p03, y),
  f(p10, p11, p12, p13, y),
  f(p20, p21, p22, p23, y),
  f(p30, p31, p32, p33, y),
  x)

donde (x, y) es la posición interpolada y p [] [] es la matriz 2d que representa la cuadrícula 4 * 4.

Consulte este enlace para obtener más información y un código de ejemplo, que realmente ayuda mucho.

EvilTak
fuente
0

Si bien las otras respuestas dadas son correctas, no estoy seguro de que respondan por completo a su pregunta. Para no obtener barras negras, tiene 2 opciones si el destino no tiene la misma forma (o relación de aspecto) que la fuente:

  1. Rellene el destino dejando algunos píxeles del origen fuera del destino. En su ejemplo, la fuente es 1024x768 y el destino es 1920x1080. Si escala la imagen original para que el resultado sea 1920x1440, puede recortar la parte superior y / o inferior para que sea 1920x1080.
  2. Estire la imagen de destino para que se ajuste. Entonces escalaría verticalmente en 1080/768 = 1.40625, y escalaría horizontalmente en 1920/1024 = 1.875. Esto casi nunca es lo que quieres, y se ve terrible en la mayoría de los casos. (Esto es lo que hace que las personas se vean mucho más anchas de lo que deberían, y convierte los círculos en óvalos y las rotaciones en tijeras).

Hay otra opción, pero no se ajusta a sus criterios: escala uniformemente, pero solo hasta que 1 dimensión sea tan grande como el destino. En este caso, escalarías tanto horizontal como verticalmente en 1.40625 para obtener un resultado de 1440x1080. Esto generalmente se conoce como "escala para adaptarse".

Para cualquiera de estas opciones, puede usar el algoritmo de escala que satisfaga sus necesidades.

usuario1118321
fuente
1
También podrías tener barras blancas. También puede usar alguna función de síntesis de imagen para llenar los píxeles; puede superponer una imagen consigo misma, una recortada y otra que se estira, por ejemplo. Aquí simplemente hay una infinidad de formas de tratar sin datos. Creo que la mayoría de nosotros asumimos que será una escala no uniforme.
joojaa
Muy cierto. Asumí que el póster original específicamente no quería llenarse con un color sólido y estaba interesado solo en el aspecto de escala, ya que eso es lo que preguntaron. Pero hay muchos otros métodos de relleno. También hay métodos de escala no lineales, donde el centro mantiene su relación de aspecto y los bordes se extienden, por ejemplo.
user1118321