¿La herramienta de curvas en Photoshop (o cualquier software) hace suavizado?

No estoy hablando de dibujar curvas suaves aquí, sino de la herramienta de curvas utilizada para ajustar los niveles de color. Una ilustración valdrá más que mil palabras, aquí. Este es un ajuste en Gimp:

Ajustamiento:

ajuste de curvas

Histograma Antes:

antes

Histograma después:

después

Aquí, vemos que la herramienta ha realizado el mapeo simple del canal de 8 bits a lo largo de la curva, lo que produce un patrón de cebra en la salida resultante.

¿Hay algún software que maneje esto de una manera más sofisticada, usando un algoritmo anti-aliasing para que se use el rango completo de valores de salida?

Será mejor que no lo llame "anti-aliasing". Aliasing es tener varias entradas que dan como resultado la misma salida. En su caso, el software hace exactamente lo que usted quiere: mapea biyectivamente todos los valores entre el punto blanco y el negro.

Respuestas (4)

Lo más probable es que una imagen de 8 bits tenga sus valores de píxeles truncados. Lo que debe hacer es interpolar los bits de bajo orden que faltan antes de aplicar una transformación de color. No hay forma de saber cuáles son los valores faltantes, tendría que hacer ciertas suposiciones, como la suavidad.

Para responder a su pregunta, no conozco ningún editor de imágenes que ofrezca esta función. ¿Por qué no? Velocidad para uno, el comando de curvas/niveles en la mayoría de los editores de fotos es lo suficientemente rápido como para trabajar en tiempo real para que pueda ver el efecto en su imagen. Ahora podría tener una función separada que opere cuando no esté en la vista previa, pero esta sería una función de nivel bastante alto y tendría que implementarla para todas las operaciones que aplican escala a los valores de píxeles. Finalmente, es un problema que desaparece por completo si tiene una cámara compatible con RAW y adopta un flujo de trabajo de 16 bits.

Siempre puede hacer la interpolación usted mismo, por ejemplo, convirtiendo a 16 bits, remuestreando a una resolución más alta, reduciendo la resolución. Un esquema alternativo que probablemente funcionará igual de bien sería aleatorizar los bits de orden inferior (agregando una pequeña cantidad de ruido). O una combinación de remuestreo y aleatorización.

No se desanime demasiado por el aspecto del histograma en su imagen, es poco probable que se note el error de cuantización de esa operación si hay algún ruido en la imagen, siempre que no tenga áreas con gradientes de color poco profundos (sin embargo, en casos con transiciones suaves y poco ruido, la interpolación funcionaría muy bien).

Aunque la pérdida de información de color claramente no se puede evitar en este tipo de transformación de 8 bits, puede tener una imagen que se comporte mejor si acepta un poco de pérdida de nitidez...

No sé en otros programas, pero en darktableti puedes usar el módulo "dithering":

módulo dithering en dt

Probé el mismo truco en una pequeña imagen jpeg, y este es el resultado: antes:

antes de vacilar

y después:

después de tramar

Ahora el histograma se comporta mucho mejor; puede reducir las bandas de color en algunos casos.

Desde un punto de vista teórico, no existe una forma "Verdadera" de recuperar esos valores. los núcleos de convolución (como el suavizado guassiano o un núcleo que conserva los bordes) y el tramado harán suposiciones para traerlos de vuelta, es posible que los filtros de rango no (como la mediana).

Sin embargo, no hay forma de "saber" cómo deberían haber sido esos valores antes de la cuantificación, por lo que es un juicio subjetivo, qué filtro basado en convolución prefiere. Es posible que deba usar varios filtros y enmascarar su imagen en cuanto a dónde desea que se apliquen.

La mejor manera de superar esto es mediante el procesamiento en modo de 16 bits, de modo que el "espacio de valores en forma de cebra" se vuelva a muestrear cuando se pasa a 8 bits. Esto debería eliminar la mayoría de los valores omitidos en un espacio de 8 bits, a menos que haya agregado mucho contraste/ganancia.

Entiendo todo esto, y es un trasfondo útil para la pregunta, pero no la responde ...
Supongo que formularlo como una respuesta, pero sería demasiado breve: "Incluso si hicieran algo, sería teóricamente incorrecto", lo que significa que: "Ellos elegirían un filtro que creen que funciona en las situaciones principales", pero tú eres el mejor juez de eso para tu imagen en particular. Peor aún es que su elección podría arruinar su oportunidad de aplicar el mejor filtro después (suavizando los detalles que desea conservar o agregando artefactos de alias).
Entonces, ¿qué tal una selección de filtros, como es común con el escalado? Hice el experimento muy rudimentario de duplicar el tamaño de mi imagen con bicúbico, ajustar las curvas y luego volver a reducirlo, con resultados razonablemente buenos. No estoy comprando el argumento de "arruina tu oportunidad" en estos días modernos de editores de imágenes no destructivos.
No arruinas tu oportunidad si haces experimentos tú mismo, pero si el desarrollador oculta una función dentro de otra que no puedes apagar, arruinará tu oportunidad de arreglarla a tu manera. Puede volver a muestrear la imagen con ajuste de spline, cambiando el orden de la spline según la cantidad de detalles. Su escala bicúbica es buena para cuando las "bandas" están dentro de 1-2 píxeles y la textura no se ve demasiado afectada por ella. De lo contrario, HermiteXn podría funcionar. Si sabe que tiene una región suave, puede usar un filtro medio del tamaño de sus bandas. Realce de contraste local. te da un poco, también.
No creo que realmente importe que no puedas recuperar los valores intermedios "correctos", lo único que importa es cómo se ve el resultado. Un poco de grano fino suele ser preferible a la formación de bandas notables...
si, eso es lo que dije. deje que el usuario decida qué tratamiento "falso" se ve mejor.

Todos los ajustes que haga serán destructivos de esta manera.

un par de mejores prácticas para minimizar el daño de contraste que puede ocurrir por un ajuste excesivo.

  1. Comience con una imagen completamente neutral o procesada logarítmicamente en 16 bits

  2. No realice ajustes permanentes de niveles, curvas, tono/sat o contraste de brillo. mantener todo en capas.

  3. ¡NO UTILICE NIVELES! Las curvas son mucho mejores para graduar valores.

  4. aplanar y guardar en 8 bits.

En cuanto a la pregunta algorítmica, no conozco nada que pueda revertir o "manejar" esto mejor. ¿Esto es para trabajo científico?

¿Puedes explicar el comentario de "no usar niveles"? Según tengo entendido, en realidad es una interfaz cruda para exactamente lo mismo. En mi ejemplo de ajuste anterior, la curva (una línea recta en este caso) es exactamente la misma que se obtendría al arrastrar los controles deslizantes de puntos blancos y negros hacia adentro en la herramienta de niveles.
Acabo de descubrir por el uso que arrastrar el control deslizante del punto medio en los niveles es un ajuste duro para las imágenes. Mi comentario no se basa en las matemáticas o el algoritmo detrás del proceso. Tendría curiosidad por saber si son lo mismo y para qué sirven dos interfaces de lo mismo.
Sí, ajustar el control deslizante del punto medio más que un poco introduce una curva muy fuerte. Hay más de una interfaz porque la herramienta de curvas es más difícil de entender para muchas personas. (Si tiene Gimp, en realidad es fácil ver cuál sería el efecto de un ajuste de niveles como una curva, porque el cuadro de diálogo de niveles tiene un botón que cambia al cuadro de diálogo de curvas con el mismo ajuste. Si no tiene Gimp , publique una nueva pregunta sobre esto y publicaré una explicación y algunos ejemplos como respuesta).