La interpolación de convolución cúbica direccional (DCCI) es un algoritmo de escalado de imágenes dirigido por bordes creado por Dengwen Zhou y Xiaoliu Shen. [1]
Al tener en cuenta los bordes de una imagen , este algoritmo de escalado reduce los artefactos comunes a otros algoritmos de escalado de imágenes. Por ejemplo, se eliminan los artefactos de escalera en líneas diagonales y curvas.
El algoritmo cambia el tamaño de una imagen al doble de sus dimensiones originales, menos 1. [2]
El algoritmo
El algoritmo funciona en tres pasos principales:
- Copie los píxeles originales en la imagen de salida, con espacios entre los píxeles.
- Calcula los píxeles para los espacios diagonales.
- Calcule los píxeles para los espacios horizontales y verticales restantes.
Calcular píxeles en espacios diagonales
La evaluación de los píxeles diagonales se realiza sobre los datos de la imagen original en una región de 4 × 4, con el nuevo píxel que se está calculando en el centro, en el espacio entre los píxeles originales. Esto también se puede considerar como la región de 7 × 7 en la imagen ampliada centrada en el nuevo píxel a calcular, y los píxeles originales ya se han copiado.
El algoritmo decide uno de tres casos:
- Borde en dirección arriba-derecha: se interpola a lo largo de la dirección abajo-derecha
- Borde en dirección hacia abajo a la derecha: se interpola en la dirección hacia arriba a la derecha.
- Área suave: interpola en ambas direcciones y luego multiplica los valores por pesos.
Cálculo de la resistencia del borde diagonal
Sea d1 la suma de las aristas en la dirección arriba-derecha y d2 la suma de las aristas en la dirección abajo-derecha.
Para calcular d1, tome la suma de abs (P (X, Y) - P (X - 1, Y + 1)), en la región de X = 1 a 3, e Y = 0 a 2.
Para calcular d2, tome la suma de abs (P (X, Y) - P (X + 1, Y + 1)), en la región de X = 0 a 2 e Y = 0 a 2.
Interpolación de píxeles
Si (1 + d1) / (1 + d2)> 1,15, entonces hay un borde en la dirección superior derecha. Si (1 + d2) / (1 + d1)> 1,15, entonces hay un borde en la dirección hacia abajo a la derecha.
De lo contrario, uno está en una zona lisa. Para evitar operaciones de división y coma flotante , esto también se puede expresar como 100 * (1 + d1)> 115 * (1 + d2) y 100 * (1 + d2)> 115 * (1 + d1).
Borde arriba a la derecha
Para un borde en la dirección hacia arriba a la derecha, se interpola en la dirección hacia abajo a la derecha.
Píxel de salida = (-1 * P (0, 0) + 9 * P (1, 1) + 9 * P (2, 2) - 1 * P (3, 3)) / 16
El valor de píxel deberá forzarse al rango válido de valores de píxel (generalmente de 0 a 255).
Borde inferior derecho
Para un borde en la dirección hacia abajo a la derecha, se interpola en la dirección hacia arriba a la derecha.
Píxel de salida = (-1 * P (3, 0) + 9 * P (2, 1) + 9 * P (1, 2) - 1 * P (0, 3)) / 16
El valor de píxel deberá forzarse al rango válido de valores de píxel (generalmente de 0 a 255).
Zona lisa
En el área suave, la fuerza del borde desde arriba hacia la derecha contribuirá al píxel muestreado hacia abajo a la derecha y la fuerza del borde desde abajo hacia la derecha contribuirá al píxel muestreado hacia arriba a la derecha.
w1 = 1 / (1 + d1 ^ 5)
w2 = 1 / (1 + d2 ^ 5)
peso1 = w1 / (w1 + w2)
peso2 = w2 / (w1 + w2)
DownRightPixel = (-1 * P (0, 0) + 9 * P (1, 1) + 9 * P (2, 2) - 1 * P (3, 3)) / 16
UpRightPixel = (-1 * P (3, 0) + 9 * P (2, 1) + 9 * P (1, 2) - 1 * P (0, 3)) / 16
Pixel de salida = DownRightPixel * peso1 + UpRightPixel * peso2
El valor de píxel deberá forzarse al rango válido de valores de píxel (generalmente de 0 a 255).
Calcular los píxeles restantes
La evaluación de los píxeles restantes se realiza en los datos de la imagen escalada en una región de 7 × 7, con el nuevo píxel que se calcula en el centro. Estos cálculos dependen de los píxeles originales de la imagen o de un píxel diagonal calculado en el paso anterior.
El algoritmo decide uno de tres casos:
- Borde en dirección horizontal: se interpola a lo largo de la dirección vertical.
- Borde en dirección vertical: se interpola a lo largo de la dirección horizontal.
- Área suave: interpola en ambas direcciones y luego multiplica los valores por pesos.
Calcular la resistencia del borde horizontal / vertical
Sea d1 la suma de las aristas en la dirección horizontal y d2 la suma de las aristas en la dirección vertical.
Considere una región en forma de diamante de 7 × 7 centrada en el píxel para calcular, utilizando solo los valores de píxel del original y los valores de píxel agregados desde la dirección diagonal.
Para calcular d1, tome la suma de las diferencias absolutas de los bordes horizontales, muestreando estos valores de píxeles:
| P (X + 1, Y-2) - P (X-1, Y-2) | +| P (X + 2, Y-1) - P (X, Y-1) | + | P (X, Y-1) - P (X-2, Y-1) | +| P (X + 3, Y) - P (X + 1, Y) | + | P (X + 1, Y) - P (X-1, Y) | + | P (X-1, Y) - P (X-3, Y) | +| P (X + 2, Y + 1) - P (X, Y + 1) | + | P (X, Y + 1) - P (X-2, Y + 1) | +| P (X + 1, Y + 2) - P (X-1, Y + 2) |
Para calcular d2, tome la suma de las diferencias absolutas de los bordes verticales, muestreando estos valores de píxeles:
| P (X-2, Y + 1) - P (X-2, Y-1) | +| P (X-1, Y + 2) - P (X-1, Y) | + | P (X-1, Y) - P (X-1, Y-2) | +| P (X, Y + 3) - P (X, Y + 1) | + | P (X, Y + 1) - P (X, Y-1) | + | P (X, Y-1) - P (X, Y-3) | +| P (X + 1, Y + 2) - P (X + 1, Y) | + | P (X + 1, Y) - P (X + 1, Y-2) | +| P (X + 2, Y + 1) - P (X + 2, Y-1) |
Interpolación de píxeles
Si (1 + d1) / (1 + d2)> 1,15, entonces uno tiene un borde en la dirección horizontal.
Si (1 + d2) / (1 + d1)> 1,15, entonces uno tiene un borde en la dirección vertical.
De lo contrario, uno está en la zona lisa.
Para evitar operaciones de división en coma flotante, esto también se puede expresar como 100 * (1 + d1)> 115 * (1 + d2) y 100 * (1 + d2)> 115 * (1 + d1).
Borde horizontal
Para un borde horizontal, se interpola en la dirección vertical, utilizando solo la columna centrada en el píxel.
Píxel de salida = (-1 * P (X, Y - 3) + 9 * P (X, Y - 1) + 9 * P (X, Y + 1) - 1 * P (X, Y + 3)) / dieciséis
El valor de píxel deberá forzarse al rango válido de valores de píxel (generalmente de 0 a 255).
Borde vertical
Para un borde vertical, se interpola en la dirección horizontal, utilizando solo la fila centrada en el píxel.
Píxel de salida = (-1 * P (X - 3, Y) + 9 * P (X - 1, Y) + 9 * P (X + 1, Y) - 1 * P (X + 3, Y)) / dieciséis
El valor de píxel deberá forzarse al rango válido de valores de píxel (generalmente de 0 a 255).
Zona lisa
En el área suave, la fuerza del borde horizontal contribuirá al peso del píxel muestreado verticalmente y la fuerza del borde vertical contribuirá al peso del píxel muestreado horizontalmente.
w1 = 1 / (1 + d1 ^ 5)
w2 = 1 / (1 + d2 ^ 5)
peso1 = w1 / (w1 + w2)
peso2 = w2 / (w1 + w2)
HorizontalPixel = (-1 * P (X - 3, Y) + 9 * P (X - 1, Y) + 9 * P (X + 1, Y) - 1 * P (X + 3, Y)) / 16
VerticalPixel = (-1 * P (X, Y - 3) + 9 * P (X, Y - 1) + 9 * P (X, Y + 1) - 1 * P (X, Y + 3)) / 16
Pixel de salida = VerticalPixel * peso1 + HorizontalPixel * peso2
El valor de píxel deberá forzarse al rango válido de valores de píxel (generalmente de 0 a 255).
No especificado
Píxeles de límite
El algoritmo no define qué hacer al muestrear áreas de límites fuera de la imagen. Las posibles cosas que se pueden hacer incluyen replicar el píxel del límite, envolver los píxeles del otro lado de la imagen, envolver el mismo lado de la imagen al revés o usar un valor de color de borde en particular.
Imágenes en color
El algoritmo no especifica las imágenes en color; sin embargo, se pueden sumar todas las diferencias de los componentes RGB al calcular la fuerza del borde y utilizar todos los componentes RGB al interpolar los píxeles. O se podría dividir en YCbCr , procesar solo el componente luma y estirar el croma usando un algoritmo diferente.
Ver también
Referencias
- ^ Dengwen Zhou; Xiaoliu Shen. "Zoom de imagen mediante interpolación de convolución cúbica direccional" . Consultado el 13 de septiembre de 2015 .
- ^ Sabir, Essaïd; Medromi, Hicham; Sadik, Mohamed (2 de febrero de 2016). Avances en redes ubicuas: Actas de UNet'15 . Saltador. ISBN 978-981-287-990-5.