GIMP: escala de imagen no lineal

En GIMP, quiero poder escalar una imagen de forma no lineal en el eje horizontal. Las herramientas de perspectiva y mapeo no funcionan para esto porque cambian la imagen verticalmente por la perspectiva. La siguiente imagen ilustra lo que busco. Agradecería cualquier orientación!ingrese la descripción de la imagen aquí

¡Bienvenido a GD.SE, David! ¿Te podría ayudar esta pregunta ?

Respuestas (2)

Está en el filtro de configuración básico de GIMP Distorsionar> Esferizar. En modo horizontal, deforma su imagen como si fuera una etiqueta de botella. Definitivamente no es lineal, pero solo tienes un pequeño control. Una transformación matemática personalizada sería mejor. Se discute al final de esta respuesta.

Desafortunadamente, el área más escasa está en el medio, no en el borde derecho. Pero puede insertar temporalmente una mitad derecha en blanco en su lienzo.

Recuerde establecer el tamaño de la capa para cubrir todo el lienzo. En GIMP, las capas son tan grandes como su contenido si no se establece el tamaño de la capa.

Se pueden aplicar expresiones no lineales arbitrarias, por ej. con paquete de filtros G'MIC. Tiene en parte el filtro "Deformaciones" Transformada cartesiana.

Un ejemplo; la imagen original:

ingrese la descripción de la imagen aquí

Diálogo de filtro:

ingrese la descripción de la imagen aquí

Escribe fórmulas para las coordenadas del punto en la imagen original desde donde se lleva el contenido al punto de resultado (x,y). Las fórmulas son probablemente expresiones matemáticas del lenguaje Python (no estoy seguro). Los parámetros w y h están disponibles para las dimensiones en píxeles de ancho y alto de la imagen. Necesitas que coincidan con los bordes.

Para obtener algo que se asemeje a su propio dibujo, puede escribir para x la expresión w*f(x/w) donde f=cualquier función entre 0 y 1 tiene las siguientes propiedades

  1. f(0)=0 y f(1)=1
  2. continuo, crece monótonamente
  3. su derivada decrece monótonamente.

un ejemplo con esta idea:

fórmula para x: w*(1-exp(-x/w))/(1-exp(-1))

fórmula para y: y

el original:

ingrese la descripción de la imagen aquí

el resultado:

ingrese la descripción de la imagen aquí

Usted mencionó que probó la cuadrícula de perspectiva que desafortunadamente escaló tanto x como y. La siguiente fórmula x da todo lo posible de derecha a izquierda viendo escalas de tipo cuadrícula de perspectiva unidimensional con diferentes valores del parámetro A. Debe ser un número positivo, mayor que cero

fórmula para X: w * (A+1) * X/(A * W + X)

fórmula para Y: Y

una A demasiado pequeña, digamos A=0.1, hace que el resultado sea demasiado denso para una imagen de mapa de bits a la izquierda y una A demasiado grande, digamos A=3, hace que el efecto sea inútilmente suave. La imagen del laberinto anterior está escalada con A=1:

ingrese la descripción de la imagen aquí

Tengo G'MIC instalado en Krita, pero también está disponible para GIMP y Paint.NET.

Es difícil decir qué idioma son, ya que se ve igual en c, java, javascript, rust, c#, python y en la mayoría de las calculadoras funcionales. Las expresiones matemáticas son solo esa matemática.
Distorsionar -> Spherize era exactamente lo que estaba buscando, vertical en lugar de horizontal en mi caso, pero esa es simplemente una opción seleccionable. ¡Gracias!

Tales transformaciones son matemáticamente difíciles de definir. Si su transformación es una ley de seno/coseno, puede usar los filtros que proyectan su capa a un cilindro (Filtros>Mapa>Mapear objeto y mapear a cilindro).

Para una transformación arbitraria, posiblemente usando un mapa de desplazamiento , pero el mapa real puede ser difícil de encontrar:

ingrese la descripción de la imagen aquí

Para crear el mapa de desplazamiento (#2):

  • Cree un degradado de blanco a negro en la imagen
  • Use curvas para cambiarlo a un degradado de gris a blanco a gris (el degradado bilateral simple no funciona bien)

ingrese la descripción de la imagen aquí

Si, por el contrario, solo desea crear una cuadrícula, en lugar de comprimir una cuadrícula normal, puede generar una ruta, el ofn-path-inbetweenerscript generará rutas intermedias entre dos rutas, con una ley del cuadrado o del coseno. Un efecto secundario es que las barras tienen el mismo ancho:

ingrese la descripción de la imagen aquí