Boost: перебор области изображения - PullRequest
2 голосов
/ 29 июня 2011

У меня есть изображения, которые мне не принадлежат, со смежными монохромными пикселями, которые в настоящее время я повторяю с немым приращением указателя.

Теперь у меня есть необходимость перебирать 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 Ответ

3 голосов
/ 21 ноября 2011

У вас есть два понятия: (i) подизображение и (ii) 1-й итератор по изображению.

Я бы начал с просмотра vil_image_view в библиотеке VXL .

Это отделяет концепцию данных изображения от представления (просмотра) данных. Представление обеспечивает istep, jstep amd planestep с приращениями и индексирование пикселей. Различные vil_image_views могут быть созданы для представления обрезанных изображений из одних и тех же базовых данных. Эта библиотека только частично совместима с STL, и хорошая реализация STL была бы интересна, но я не уверен в чистом способе реализации 2D-итератора в STL.

...