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:
Neye dayanarak
Vector.Unboxed
UArray
arasında tercih etmeliyim? Hem Kutusuz diziler, amaVector
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?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?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?
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
Ç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
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
'tavsiye simge dosya - paket iPho...
Nasıl Uİİmage (Cocoa Touch) veya CGİma...
Neden Twitter Bootstrap Yazı tipi Boyu...
'tek bir piksel olarak ayarlamak ...
Apple-touch-simge için doğru piksel bo...