SORU
15 Mayıs 2011, Pazar


Temsil milyonlarca piksel 2D, Kutusuz piksel diziler için tavsiye edilir ne Haskell?

Bazı görüntü işleme Haskell sorunları çözmek istiyorum. Milyonlarca piksel arttırımı yapılabilir (bitmap) ve renkli görüntüler ile çalışıyorum. Birkaç soru var:

  1. Neye dayanarak Vector.Unboxed UArray arasında tercih etmeliyim? Hem Kutusuz diziler, ama Vector soyutlama ağır reklamı, belirli bir döngü fusion civarında görünüyor. Vector her zaman daha iyidir?ne zaman, hangi temsil kullanmalıyım?

  2. Renkli görüntüler için tek duyarlıklı kayan noktalı sayı 16-bit tamsayı veya üç katına üç katına saklamak istiyorum. Bu amaçla, Vector UArray ya kullanımı kolay mı? Daha fazla ölçülebilir?

  3. Arttırımı yapılabilir görüntüler için piksel başına 1 bit saklamak için ihtiyacım olacak. Bana burada bir kelime birden fazla piksel ambalaj ile yardımcı olabilir önceden tanımlanmış bir veri türü var mı, yoksa tek başıma mıyım?

  4. Son olarak, benim diziler iki boyutlu. Ekstra yönlendirme "diziler" (ya da vektör vektör), ama Endeksi-eşleme desteği olan bir soyutlama tercih ederim. dizi olarak gösterimi dayattığı üstesinden gelebilirim sanırım Herkes Hackage standart bir kütüphane ya da bir şey tavsiye edebilir misiniz?

Fonksiyonel bir programcı değilim ve hiç gerek yok mutasyon için :-)

CEVAP
15 Mayıs 2011, Pazar


Çok boyutlu diziler için, Haskell, mevcut en iyi seçenek bencerepa.

Repa yüksek performans, çok boyutlu düzenli, şekil polimorfik paralel diziler sağlar. Tüm sayısal verileri Kutusuz saklanır. Fonksiyonları Repa bu combinators ile yazılmış otomatik olarak program çalışırken RTS-Nwhatever komut satırında kaynağı paraleldir.

Son zamanlarda, bazı görüntü işleme Problemleri için kullanılmıştır:

Yazmaya başladıma tutorial on the use of repaeğer zaten Haskell diziler biliyorsanız, ya da vektör kütüphane başlamak için iyi bir yerdir., Anahtar basamak Basit Dizin türleri yerine şekil türleri, çok boyutlu endeksleri (ve hatta kalıpları) adres için.

repa-io paket okuma ve yazma için destek içerir .bmp resim formatları için daha fazla destek gerekli olmasına rağmen dosyaları.

Özel sorulara yanıt, burada, tartışma ile bir grafik


All three of UArray, Vector, and Repa support unboxing. Vector and Repa have a rich, flexible API, but UArray does not. UArray and Repa have multi-dimensional indexing, but Vector does not. They all have support for bit-packing, although Vector and Repa have some caveats in that regard. Vector and Repa interoperate with C data and code, but UArray does not. Only Repa supports stencils.


Neye dayanarak Vektör arasında bir seçim yapmalıyım.Kutusuz ve UArray?

Onlar yaklaşık aynı temel temsil, ancak, birincil fark genişliği API ile çalışmak için vektörler: var neredeyse tüm işlemleri edersin normalde ilişkilendirmek listeleri (bir füzyon temelli bir optimizasyon çerçevesinde), UArray neredeyse hiçbir API.

Renkli görüntüler için tek duyarlıklı kayan noktalı sayı 16-bit tamsayı veya üç katına üç katına saklamak istiyorum.

UArray indeksleme için rasgele veri türlerini kullanmak gibi çok boyutlu veri için daha iyi destek var. Olsa bu mümkündür Vector (yazılı örneği UA için öğe türü), değil mi primer gol Vector -- yerine, burada Repa adımları, kullanımı çok kolay özel veri türleri, saklı verimli bir şekilde, teşekkürlerşekildizin oluşturma.

Repa, üç şort türü vardır:

Array DIM3 Word16

Yani, Word16s 3 boyutlu bir dizi.

Arttırımı yapılabilir görüntüler için piksel başına 1 bit saklamak için ihtiyacım olacak.

Bit pack Bools UArrays, Vektör bit paketleme yapar hangi Bool için örnek yerine gösterimi Word8 dayanarak kullanır. Ancak, kolay vektörler bit-ambalaj uygulaması (eski) uvector kütüphaneden 25*--*, yazmak için. Kaputun altında, Repa kullanan Vectors, Bu yüzden kütüphaneler temsili seçimler o devralır bence.

Benim burada bir kelime birden fazla piksel ambalaj ile yardımcı olabilir önceden tanımlanmış bir veri türü

Farklı sözcük türleri için kütüphaneler için varolan örnekleri kullanabilirsiniz, ama birkaç yardımcıları Verileri kullanarak yazmak gerekebilir.Rulo ve paket verileri göz önüne sermek için bit.

Son olarak, benim diziler iki boyutlu

UArray ve Repa desteği çok boyutlu diziler verimli. Repa da bunu yapmak için zengin bir arayüze sahiptir. Kendi vektör değildir.


Önemli söz:

  • hmatrix, Lineer Cebir paketleri için geniş bağlantıları olan özel bir dizi yazın. vector repa türlerini kullanmaya bağlı olması.
  • * *27, normal dizilerden daha esnek indeksleme almak
  • chalkboard, 2D görüntüleri işlemek için Andy Gill Kütüphanesi
  • codec-image-devil ve UArray için çeşitli resim formatları okuma ve yazma

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Distractify

    Distractify

    1 Aralık 2011
  • The Fashion Sight

    The Fashion

    22 AĞUSTOS 2011
  • ThreadBanger

    ThreadBanger

    2 Mart 2007