读取多个* .gif图像时的快速性能

时间:2017-04-10 13:54:24

标签: r gif

我的电脑(i5-6500 3.2 GHZ,8 GB RAM)需要很长时间:大约10分钟(还没准确测量)。

我目前必须

  1. 阅读400张图片。 (* .gif格式,全部应为b& w,分辨率约为200 * 400像素。)(总共3520张图片)

  2. 我想“逐步”添加所有图片。

  3. 这是我现在如何做到这一点:使用raster阅读图片,而不是将其转为matrix,然后sum

    library(rgdal)
    library(raster)
    library(magrittr)
    
    oldPic <- raster("initalImage.gif") %>% as.matrix
    
    for (pat_IND in currSide) {
        newPic <- raster(pat_IND) %>% as.matrix
        oldPic <- oldPic + newPic
    }
    

    这需要永远。我使用caTools::read.gif()甚至更慢。我的代码中有瓶颈吗?是否有更快的实施?

    编辑:图像属性

    enter image description here

    我使用“没有抖动”,单声道调色板(b&amp; w)。

    EDIT2

    我想按像素添加图像。让我们拍摄照片A和照片B.

    A + B = C.如果A(1,1)= 1且B(1,1)= 1,则C(1,1)应为2.它是一个简单的矩阵加法。

    测试图片:

    img

    1. 使用光栅读取需要0.03699994秒
    2. 使用栅格+ as.matrix读取:0.201秒

1 个答案:

答案 0 :(得分:1)

你需要测量......没有任何样本图像很难说,我们只能猜测。您需要考虑加载/解码 JPG 需要花费时间(以毫秒为单位), GIF 的编码甚至可能耗费200 ms。取决于编码类型。要加快 GIF 编码,您可以:

  1. 使用单一全局调色板+抖动

    GIF 8 bpp JPG 24 bpp,因此您的编码器需要进行转换。这被称为颜色量化,并且是编码中最昂贵的操作,在良好优化的 C ++ 代码中,平均 PC 机器每帧甚至可以~200 ms。欲了解更多信息,请参阅:

    要解决这个问题,您可以使用专用于抖动的单个调色板(例如默认 VGA 或使用一些 WEB 调色板,它们具有相同的用途)并使用抖动很多快点。参见:

    顺便说一句,如果你需要保留颜色,请看一下:

    因此,请尝试找出如何配置编码器以强制抖动而不是基于 K-means 或类似的颜色量化....

  2. 将编码字典限制为少于4096

    编码/解码基于创建字典和编码需要在每个像素的基础上多次搜索它。因此,将其大小变为1024会大大提高速度。粗略的,你需要访问编码代码来改变它,除非可以在其中以某种方式配置...压缩将由此减少,但流中将出现更清晰的代码。

  3. 使用多线程

    您可以完全并行化并对系统中存在的每个核进行编码。

  4. 我强烈建议您测量编码 GIF 的单帧所需的时间。如果您利用子弹#1,#2 ,那么我估计您可以在每帧~5 ms附近获得近似时间,抖动和~60 ms每帧快速量化。因此,对于3520帧,只需要17.6211.2秒来编码 GIF ,因此请添加文件内存和 JPG 操作并且考虑到所有因为您没有提供样本数据而被大量猜测/估计。如果您使用#3 +/-共享光盘访问等待,则除以核心数。