小编Fal*_*ger的帖子

用repa计算图像直方图

我正在从磁盘加载RGB图像JuicyPixels-repa.不幸的是,图像的阵列表示是Array F DIM3 Word8内部维度是RGB像素的位置.这与repaRGB图像的现有图像处理算法有点不相容Array U DIM2 (Word8, Word8, Word8).

我想计算图像的RGB直方图,我正在使用签名搜索函数:

type Hist = Array U DIM1 Int
histogram:: Array F DIM3  Word8 -> (Hist, Hist, Hist)
Run Code Online (Sandbox Code Playgroud)

如何折叠我的3d数组以获得每个颜色通道的1d数组?

编辑:

主要的问题不在于我无法从转换DIM3DIM2每通道(容易切片完成).问题是我必须迭代源图像,DIM2或者DIM3必须累积到DIM1不同Shape (Z:.256) 范围的数组.所以我不能使用repa,foldS因为它将维度减少了一个,但程度相同.

我也进行了实验,traverse但它迭代了目标图像的范围,提供了从源图像中获取像素的功能,这将导致代码效率非常低,为每个颜色值计算相同的像素.

一个好方法是Vector使用直方图类型作为累加器进行简单的折叠,但不幸的是我没有U(无盒装)或V基于(矢量)的数组,我可以从中有效地得到一个Vector.我有一个Array F(外国指针).

haskell repa

8
推荐指数
1
解决办法
606
查看次数

标签 统计

haskell ×1

repa ×1