Я хочу решить некоторые проблемы обработки изображений в Haskell. Я работаю с bitonal (bitmap) и цветными изображениями с миллионами пикселей. У меня есть ряд вопросов:
-
На каком основании я должен выбирать между
Vector.Unboxed
иUArray
? Они представляют собой обе распакованные массивы, но абстракцияVector
кажется сильно рекламируемой, особенно в случае слияния цикла. Всегда лиVector
лучше? Если нет, , когда следует использовать какое представление? -
Для цветных изображений я хочу сохранить тройки 16-битных целых чисел или тройки чисел с плавающей запятой с одинарной точностью. С этой целью проще использовать
Vector
илиUArray
? Более эффективный? -
Для битонных изображений мне нужно будет хранить только 1 бит на пиксель. Есть ли предопределенный тип данных, который может помочь мне здесь, упаковывая несколько пикселей в слово или я сам?
-
Наконец, мои массивы являются двумерными. Я полагаю, что могу иметь дело с дополнительной косвенностью, навязываемой представлением как "массив массивов" (или вектором векторов), но я бы предпочел абстракцию, поддерживающую индексацию. Может ли кто-нибудь рекомендовать что-нибудь из стандартной библиотеки или из Hackage?
Я функциональный программист и не нуждаюсь в мутации: -)