[ VIGRA Homepage | Function Index | Class Index | Namespaces | File List | Main Page ]

| NeighborhoodCirculator< IMAGEITERATOR, NEIGHBORCODE > Class Template Reference Image Iterator Adapters |

Circulator that walks around a given location in a given image. More...

`#include <vigra/pixelneighborhood.hxx>`

Inheritance diagram for NeighborhoodCirculator< IMAGEITERATOR, NEIGHBORCODE >:

## Public Types

typedef IMAGEITERATOR | base_type
typedef NEIGHBOROFFSETCIRCULATOR::difference_type | difference_type
typedef NEIGHBORCODE::Direction | Direction
typedef reference | index_reference
typedef NEIGHBOROFFSETCIRCULATOR::iterator_category | iterator_category
typedef NEIGHBORCODE | NeighborCode
typedef IMAGEITERATOR::pointer | pointer
typedef IMAGEITERATOR::reference | reference
typedef IMAGEITERATOR::value_type | value_type

## Public Member Functions

base_type const & | base () const
base_type | center () const
NEIGHBOROFFSETCIRCULATOR::value_type const & | diff () const
Direction | direction () const
unsigned int | directionBit () const
bool | isDiagonal () const
NeighborhoodCirculator & | moveCenterToNeighbor ()
| NeighborhoodCirculator (IMAGEITERATOR const &center=IMAGEITERATOR(), Direction d=NEIGHBOROFFSETCIRCULATOR::InitialDirection)
bool | operator!= (NeighborhoodCirculator const &rhs) const
reference | operator* () const
NeighborhoodCirculator | operator+ (difference_type d) const
NeighborhoodCirculator & | operator++ ()
NeighborhoodCirculator | operator++ (int)
NeighborhoodCirculator & | operator+= (difference_type d)
NeighborhoodCirculator | operator- (difference_type d) const
difference_type | operator- (NeighborhoodCirculator const &rhs) const
NeighborhoodCirculator & | operator-- ()
NeighborhoodCirculator | operator-- (int)
NeighborhoodCirculator & | operator-= (difference_type d)
pointer | operator-> () const
bool | operator== (NeighborhoodCirculator const &rhs) const
index_reference | operator[] (difference_type d) const
NeighborhoodCirculator & | swapCenterNeighbor ()
NeighborhoodCirculator & | turnLeft ()
NeighborhoodCirculator & | turnRight ()
NeighborhoodCirculator & | turnRound ()
NeighborhoodCirculator & | turnTo (Direction d)

## Detailed Description

### template<class IMAGEITERATOR, class NEIGHBORCODE>
class vigra::NeighborhoodCirculator< IMAGEITERATOR, NEIGHBORCODE >

Circulator that walks around a given location in a given image.

The template parameters define the kind of neighborhood used and the underlying image. The access functions return the value of the current neighbor pixel. Use `center()` to access the center pixel of the neighborhood. The center can be changed by calling `moveCenterToNeighbor()` or `swapCenterNeighbor()`. Note that this circulator cannot be used when the center is at the image border. You must then use vigra::RestrictedNeighborhoodCirculator

Usage:

#include <vigra/pixelneighborhood.hxx>
Namespace: vigra

BImage::traverser upperleft(...), lowerright(...);
int width = lowerright.x - upperleft.x;
int height = lowerright.y - upperleft.y;
++upperleft.y; // avoid image border
for(int y=1; y<height-1; ++y, ++upperleft.y)
{
BImage::traverser ix = upperleft + Diff2D(1,0);
for(int x=1; x<width-1; ++x, ++ix.x)
{
// analyse all neighbors of a pixel (use FourNeighborCode
// instead of EightNeighborCode for 4-neighborhood):
NeighborhoodCirculator<BImage::traverser, EightNeighborCode>
circulator(ix),
end(circulator);
do
{
analysisFunc(*circulator, ...); // do sth. with current neighbor
}
while(++circulator != end); // compare with start/end circulator
}
}

## Member Typedef Documentation

typedef IMAGEITERATOR base_type

type of the underlying image iterator

typedef NEIGHBORCODE NeighborCode

type of the used neighbor code

typedef IMAGEITERATOR::value_type value_type

the circulator's value type

typedef NEIGHBORCODE::Direction Direction

type of the direction code

typedef IMAGEITERATOR::reference reference

the circulator's reference type (return type of `*circ`)

typedef reference index_reference

the circulator's index reference type (return type of `circ[n]`)

typedef IMAGEITERATOR::pointer pointer

the circulator's pointer type (return type of `operator->`)

typedef NEIGHBOROFFSETCIRCULATOR::difference_type difference_type

the circulator's difference type (argument type of `circ[diff]`)

typedef NEIGHBOROFFSETCIRCULATOR::iterator_category iterator_category

the circulator tag (random_access_circulator_tag)

## Constructor & Destructor Documentation

NeighborhoodCirculator | ( | IMAGEITERATOR const & | center = `IMAGEITERATOR()`,
|  | Direction | d = `NEIGHBOROFFSETCIRCULATOR::InitialDirection`
| ) |  |

Construct circulator with given `center` pixel, pointing to the neighbor at the given direction `d`.

## Member Function Documentation

NeighborhoodCirculator& operator++ | ( |  | ) |

pre-increment

NeighborhoodCirculator operator++ | ( | int |  | ) |

post-increment

NeighborhoodCirculator& operator-- | ( |  | ) |

pre-decrement

NeighborhoodCirculator operator-- | ( | int |  | ) |

post-decrement

NeighborhoodCirculator& operator+= | ( | difference_type | d | ) |

add-assignment

NeighborhoodCirculator& operator-= | ( | difference_type | d | ) |

subtract-assignment

NeighborhoodCirculator operator+ | ( | difference_type | d | ) | const

addition

NeighborhoodCirculator operator- | ( | difference_type | d | ) | const

subtraction

NeighborhoodCirculator& turnRight | ( |  | ) |

Move to the direction that is 'right' relative to the current direction. This is equivalent to `four_circulator–` and `eight_circulator -= 2` respectively.

NeighborhoodCirculator& turnLeft | ( |  | ) |

Move to the direction that is 'left' relative to the current direction. This is equivalent to `four_circulator++` and `eight_circulator += 2` respectively.

NeighborhoodCirculator& turnRound | ( |  | ) |

Move to the opposite direction of the current direction. This is equivalent to `four_circulator += 2` and `eight_circulator += 4` respectively.

NeighborhoodCirculator& turnTo | ( | Direction | d | ) |

Move to the given direction.

NeighborhoodCirculator& moveCenterToNeighbor | ( |  | ) |

Move the center in the current direction. The current neighbor becomes the new center, the direction does not change.

NeighborhoodCirculator& swapCenterNeighbor | ( |  | ) |

Exchange the center with the current neighbor. Equivalent to `circ.moveCenterToNeighbor().turnRound()` (but shorter and more efficient).

bool operator== | ( | NeighborhoodCirculator< IMAGEITERATOR, NEIGHBORCODE > const & | rhs | ) | const

equality

bool operator!= | ( | NeighborhoodCirculator< IMAGEITERATOR, NEIGHBORCODE > const & | rhs | ) | const

inequality

difference_type operator- | ( | NeighborhoodCirculator< IMAGEITERATOR, NEIGHBORCODE > const & | rhs | ) | const

subtraction

reference operator* | ( |  | ) | const

dereference

index_reference operator[] | ( | difference_type | d | ) | const

index

pointer operator-> | ( |  | ) | const

member access

base_type const& base | ( |  | ) | const

Get the base iterator for the current neighbor.

base_type center | ( |  | ) | const

Get the base iterator for the center of the circulator.

Direction direction | ( |  | ) | const

Get the current direction.

unsigned int directionBit | ( |  | ) | const

Get the current direction bit.

NEIGHBOROFFSETCIRCULATOR::value_type const& diff | ( |  | ) | const

Get the difference vector (Diff2D) from the center to the current neighbor.

bool isDiagonal | ( |  | ) | const

Is the current neighbor a diagonal neighbor?

The documentation for this class was generated from the following file:

- vigra/pixelneighborhood.hxx

© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de) Heidelberg Collaboratory for Image Processing, University of Heidelberg, Germany | html generated using doxygen and Python vigra 1.10.0