提升:迭代图像区域

时间:2011-06-29 10:04:22

标签: c++ arrays boost iterator boost-iterators

我有我不拥有的图像,有相邻的单色像素,我目前用哑指针增量迭代。

我现在需要迭代2D区域,所以我正在考虑提供高效且易于编写的迭代器的最佳方法。

我只需要forward_iterator。如果我有一个10x10图像,如果我想迭代4x3左上角区域,它将迭代这些元素:

0 1 2 3 10 11 12 13 20 21 22 23

我有两个选择:

  • boost::iterator_facade
  • 手写
  • 使用boost::range_iterator,它为数组提供迭代器,并使用boost::iterator_adaptor
  • 修改其行为

您认为最好的是什么?

1 个答案:

答案 0 :(得分:3)

您有两个概念:(i)子图像,以及(ii)图像上的1-d迭代器。

我首先来看看vil_image_view in the VXL library

这将图像数据的概念与数据的表示(视图)分开。该视图提供istepjstep amd planestep增量和像素索引。可以创建不同的vil_image_views来表示来自相同底层数据的裁剪图像。这个库只与STL部分兼容,并且一个好的STL实现会很有趣,但我不确定在STL中实现2d迭代器的干净方法。