2011-06-07 36 views
15

Estoy pensando en procesar una imagen para generar the following effect en Mathematica debido a sus poderosas capacidades de procesamiento de imágenes. ¿Alguien podría dar una idea de cómo hacer esto?cómo generar una imagen de este tipo en Mathematica

Muchas gracias.

+0

Por supuesto. Solo tiene que hacer un pequeño programa para rayar lentes de aproximación no paraxiales fuera del eje. ¿Realizable? sí. ¿Útil? Lo dudo. Hay muchos paquetes de software de rastreo de rayos por ahí. –

+2

@belisarius ¿es realmente necesario? Creo que esto podría ser aproximado con una compensación calculada para la imagen en cada celda. –

Respuesta

15

Aquí hay una versión, usando texturas. Por supuesto, no actúa como una lente real, simplemente repite partes de la imagen de manera superpuesta.

t = CurrentImage[]; 

(* square off the image to avoid distortion *) 
t = ImageCrop[t, {240,240}]; 

n = 20; 
Graphics[{Texture[t], 
    Table[ 
    Polygon[ 
     Table[h*{Sqrt[3]/2, 0} + (g - h)*{Sqrt[3]/4, 3/4} + {Sin[t], Cos[t]}, 
     {t, 0., 2*Pi - Pi/3, Pi/3} 
     ], 
     VertexTextureCoordinates -> Transpose[{ 
     Rescale[ 
      (1/4)*Sqrt[3]*(g - h) + (Sqrt[3]*h)/2., 
      {-n/2, n/2}, 
      {0, 1} 
      ] + {0, Sqrt[3]/2, Sqrt[3]/2, 0, -(Sqrt[3]/2), -(Sqrt[3]/2)}/(n/2), 
     Rescale[ 
      (3.*(g - h))/4, 
      {-n/2, n/2}, 
      {0, 1} 
      ] + {1, 1/2, -(1/2), -1, -(1/2), 1/2}/(n/2) 
     }] 
     ], 
     {h, -n, n, 2}, 
     {g, -n, n, 2} 
    ] 
    }, 
    PlotRange -> n/2 - 1 
] 

Aquí está el código anterior se aplica a la standard image test (Lena)

enter image description here

+0

Brett, espero que no te importe que agregue un ejemplo ... – Simon

+0

@Simon: Ciertamente que no. –

+0

@Brett, +1 se ve genial. Pero solo tengo Mma 7.0, que no tiene la opción 'VertexTextureCoordinates'. No puedo probarlo ¿Hay una solución alternativa o algo similar en Mma7.0? ¡Gracias de nuevo! –

8

"Creo que esto podría ser bien aproximada con un decalaje calculado para la imagen en cada celda" - Mr.Wizard

¡Exactamente! Como puede ver en la imagen reconstruida, no hay efecto de lente y los mosaicos son solo desplazamientos.

enter image description here

Lo que se necesita es un Hexagonal_tessellation y un algoritmo simple para calcular el desplazamiento de cada hexágono desde algún punto central elegido (peso/2, altura/2).

+1

+1 ¡Buena reconstrucción! La teselación hexagonal es exactamente lo que hizo Brett en su respuesta. Por cierto, ¿cómo obtuviste la imagen reconstruida? – Simon

+0

@Ross sí, ¿cómo lo reconstruiste exactamente? – acl

+2

@Simon @acl - Selección de Gimp + Mano. – Ross

Cuestiones relacionadas