2011-06-07 12 views
15

Güçlü görüntü işleme yetenekleri göz önünde bulundurulduğunda Mathematica'da the following effect oluşturmak için bir işlem yapmayı düşünüyorum. Bunu yapmak için nasıl bir fikir verebilir?Mathematica'da böyle bir görüntü nasıl oluşturulur

Çok teşekkürler.

+0

Tabii ki. Eksen dışı paraksiyal yaklaşım lenslerini raytracing için küçük bir program yapmalısınız. Olabilir Mi? Evet. İşe yarar? Şüpheliyim. Orada bir sürü ışın izleme yazılımı paketi var. –

+2

@belisarius bu gerçekten gerekli mi? Bu, her bir hücrede görüntü için hesaplanmış bir sapma ile iyi bir şekilde yakınlaştırılabileceğini düşünüyorum. –

cevap

15

Bir dokuyu kullanarak, bir sürümü. Elbette gerçek bir mercek gibi davranmaz, sadece görüntünün bölümlerini örtüşen bir tarzda tekrarlar.

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 
] 

İşte standard image test (Lena) başvuruda Yukarıdaki kod

enter image description here

+0

Brett, umarım bir örnek eklememe aldırmazsınız .... – Simon

+0

@Simon: Kesinlikle değil. –

+0

@Brett, +1 harika görünüyor. Ama sadece 'VertexTextureCoordinates' seçeneği olmayan Mma 7.0 var. Denemedim. Mma7.0'da bir geçici çözüm veya benzer bir şey var mı? Tekrar teşekkürler! –

8

"Bu iyi bir her hücrede görüntü için ofset hesaplanır yaklaşılacak düşünüyorum" var - Mr.Wizard

Tam olarak! Yeniden yapılandırılmış görüntüden görebileceğiniz gibi mercek etkisi yoktur ve fayanslar sadece yer değiştirmelerdir.

enter image description here

Senin ihtiyacın olan Hexagonal_tessellation ve bazı seçilmiş merkez noktasından her altıgen için yer değiştirmeyi hesaplamak için basit bir algoritmadır (ağırlık/2, yükseklik/2).

+1

+1 Güzel yeniden yaratma! Hexagonal tessellasyon, Brett'in cevabında yaptığı gibi. Btw - yeniden oluşturulan görüntüyü nasıl aldınız? – Simon

+0

@Ross evet, tam olarak nasıl yeniden inşa ettiniz? – acl

+2

@Simon @acl - Gimp + El seçimi. – Ross

İlgili konular