algorithm - que - ¿Cuál es el mejor algoritmo de reducción de imagen(calidad)?
mejor formato de imagen (6)
Quiero averiguar qué algoritmo es el mejor que se puede usar para reducir el tamaño de una imagen ráster. Con el mejor me refiero al que da los mejores resultados. Sé de bicúbico, pero ¿hay algo mejor todavía? Por ejemplo, escuché de algunas personas que Adobe Lightroom tiene algún tipo de algoritmo patentado que produce mejores resultados que el bicúbico estándar que yo estaba usando. Lamentablemente, me gustaría utilizar este algoritmo en mi software, por lo que los secretos comerciales cuidadosamente guardados de Adobe no servirán.
Adicional:
Revisé Paint.NET y para mi sorpresa, parece que Super Sampling es mejor que bicúbico al reducir una imagen. Eso me hace preguntarme si los algoritmos de interpolación son el camino a seguir en absoluto.
También me recordó a un algoritmo que me había "inventado" a mí mismo, pero nunca implementado. Supongo que también tiene un nombre (como algo tan trivial no puede ser la idea de mí solo), pero no pude encontrarlo entre los populares. Super Sampling fue el más cercano.
La idea es esta: para cada píxel en la imagen objetivo, calcule dónde estaría en la imagen fuente. Probablemente se superponga a uno o más píxeles adicionales. Entonces sería posible calcular las áreas y colores de estos píxeles. Luego, para obtener el color del píxel objetivo, uno simplemente calcula el promedio de estos colores, agregando sus áreas como "pesos". Entonces, si un píxel objetivo cubriera 1/3 de un píxel fuente amarillo, y 1/4 de un píxel fuente verde, obtendría (1/3 * amarillo + 1/4 * verde) / (1/3 + 1/4).
Esto, naturalmente, sería computacionalmente intensivo, pero debería ser lo más cercano posible al ideal, ¿no?
¿Hay un nombre para este algoritmo?
¿Hay un nombre para este algoritmo?
Podría ser referido como remuestreo de "caja" o "ventana" en la literatura. En realidad, es menos costoso en términos de cálculo, como piensas.
También se puede usar para crear un mapa de bits intermedio que luego se utiliza mediante interpolación bicúbica para evitar el alias cuando se muestrea de más de 1/2.
Desafortunadamente, no puedo encontrar un enlace a la encuesta original, pero cuando los cineastas de Hollywood pasaron del cine a las imágenes digitales, esta pregunta surgió mucho, entonces alguien (tal vez SMPTE, tal vez el ASC) reunió a un grupo de cineastas profesionales y les mostró material que había sido redimensionado usando un montón de algoritmos diferentes. Los resultados fueron que para estos profesionales que buscan grandes películas, el consenso fue que Mitchell (también conocido como Catmull-Rom de alta calidad) es el mejor para escalar y que sinc es el mejor para escalar. Pero sinc es un filtro teórico que se dispara hasta el infinito y, por lo tanto, no se puede implementar por completo, así que no sé a qué se refieren realmente con ''sinc''. Probablemente se refiere a una versión truncada de sinc. Lanczos es una de las diversas variantes prácticas de sinc que intenta mejorar al truncarlo y es probablemente la mejor opción predeterminada para reducir las imágenes fijas. Pero, como de costumbre, depende de la imagen y de lo que desee: reducir un dibujo de líneas para conservar las líneas es, por ejemplo, un caso en el que podría preferir poner énfasis en conservar bordes que no serían bienvenidos al contraer una fotografía de flores.
Hay un buen ejemplo de los resultados de varios algoritmos en Cambridge in Color .
La gente de fxguide reunió mucha información sobre algoritmos de escalado (junto con muchas otras cosas sobre composición y otro procesamiento de imágenes) que vale la pena echarle un vistazo. También incluyen imágenes de prueba que pueden ser útiles para hacer sus propias pruebas.
Ahora, ImageMagick tiene una extensa guía sobre filtros de remuestreo si realmente desea acceder a ella.
Es un poco irónico que haya más controversia sobre la reducción de una imagen, que es teóricamente algo que se puede hacer perfectamente ya que solo se está desperdiciando información, que sobre la ampliación, donde se trata de agregar información que no funciona. t existe. Pero comienza con Lanczos.
El algoritmo que describes se llama interpolación lineal, y es uno de los algoritmos más rápidos, pero no es el mejor en las imágenes.
El remuestreo (bi-) lineal y (bi-) cúbico no es feo sino terriblemente incorrecto cuando se reduce la escala en un factor menor a 1/2. Darán como resultado un alias muy malo similar al que obtendrías si redujese un factor de 1/2 y luego utilizaras el muestreo descendente del vecino más cercano.
Personalmente recomendaría (área) promediar muestras para la mayoría de las tareas de reducción de muestreo. Es muy simple y rápido y casi óptimo. El remuestreo gaussiano (con un radio elegido proporcional al recíproco del factor, p. Ej. Un radio de 5 para la reducción de muestreo en 1/5) puede dar mejores resultados con un poco más de sobrecarga computacional, y es más matemáticamente sólido.
Una posible razón para usar el remuestreo gaussiano es que, a diferencia de la mayoría de los otros algoritmos, funciona correctamente (no introduce artefactos / aliasing) para el muestreo superior y el muestreo descendente, siempre que elija un radio apropiado para el factor de remuestreo. De lo contrario, para admitir ambas direcciones necesita dos algoritmos separados: promedio de área para la disminución de muestreo (que se degradaría al vecino más cercano para el muestreo ascendente) y algo así como (bi-) cúbico para el muestreo ascendente (que se degradaría al vecino más cercano para la disminución de muestreo). Una forma de ver esta propiedad agradable del remuestreo gaussiano matemáticamente es que el gaussiano con un radio muy grande se aproxima al promedio del área y el gaussiano con un radio muy pequeño se aproxima a la interpolación (bi-) lineal.
Hay muestras de Lanczos que son más lentas que las bicúbicas, pero producen imágenes de mayor calidad.
Vi un artículo sobre Slashdot sobre Seam Carving hace un tiempo, podría valer la pena investigarlo.
Seam carving es un algoritmo de cambio de tamaño de imagen desarrollado por Shai Avidan y Ariel Shamir. Este algoritmo altera las dimensiones de una imagen no mediante escalado o recorte, sino más bien mediante la eliminación inteligente de píxeles de (o añadiendo píxeles a) la imagen que tiene poca importancia.