2010-06-21 17 views
6

¿Qué algoritmos usar para reducir la imagen?¿Qué algoritmos usar para reducir la imagen?

¿Qué es más rápido?

¿Qué algoritmo se realiza para cambiar el tamaño de imagen (especialmente reducción de tamaño de 600x600 a súper pequeño 6x6 por ejemplo) por gigantes como Flash y Silver Player, y html5?

+1

Eso son muchas preguntas para una pregunta. –

+4

Independientemente de la elección que elija, el recorte de imagen debe hacerse con cuidado y compasión. Recuerde: las imágenes también tienen familias. –

Respuesta

7

Bilinear es el método más utilizado y puede ejecutarse tan rápido como el algoritmo de muestreo descendente vecino más cercano, que es el más rápido pero el menos preciso.

El problema con una implementación ingenua de muestreo bilineal es que si lo usa para reducir una imagen en más de la mitad, puede encontrar artefactos de aliasing similares a los que encontraría con el vecino más cercano. La solución a esto es usar un enfoque basado en la pirámide. Básicamente, si desea reducir 600x600 a 30x30, primero reduzca a 300x300, luego a 150x150, luego a 75x75, luego a 38x38, y solo luego use bilineal para reducir a 30x30.

Al reducir una imagen a la mitad, el algoritmo de muestreo bilineal se vuelve mucho más simple. Básicamente para cada fila alterna y la columna de píxeles:

y[i/2][j/2] = (x[i][j] + x[i+1][j] + x[i][j+1] + x[i+1][j+1])/4; 
+1

¿Quiere decir que bilinear debería usarse solo en el último paso? – jayarjo

1

Normalmente me quedaría un filtro bilineal para reducir la escala. Sin embargo, para cambiar el tamaño de las imágenes a tamaños pequeños, puede que no tenga suerte. La mayoría de los íconos son editados en píxeles a mano para que se vean mejor.

Here es un buen recurso que explica los conceptos bastante bien.

1

Hay un excelente article en The Code Project que muestra los efectos de varios filtros de imagen.

Para reducir una imagen, sugiero el algoritmo bicúbico; esto tiene un efecto de nitidez natural, por lo que los detalles en la imagen se conservan en tamaños más pequeños.

+0

Aparece un error 404 en esa página. Sugeriría un bicúbico para escalar, pero me quedo con mi bilineal para reducir el tamaño. En general, no va a hacer una gran diferencia. –

+0

@Ben, enlace fijo. Estoy en desacuerdo; bilinear tiene un efecto suavizante que elimina los jaggies al ampliarse, pero tiende a eliminar los detalles cuando se reduce el tamaño. De todos modos, eche un vistazo al artículo. –

3

Hay un caso especial: la reducción JPG para más de un factor de 8. Un factor directo de 8 reescalar se puede hacer en los datos JPG primas, sin descomprimirlo . Los JPG se almacenan como bloques comprimidos de 8x8 píxeles, con el valor de píxel promedio primero. Como resultado, generalmente toma más tiempo leer el archivo desde el disco o la red de lo necesario para reducirlo.

Cuestiones relacionadas