Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

2 phase, loop neighbourhood operation with two extra images

Pseudo code of the operation:

NeighbourhoodOp(Dst, Src, Ext, Ext2, Ngb)
{
    foreach d, s, e, e2 in Dst, Src, Ext, Ext2 {
        Ngb.init(s.x, s.y, Src(s), Ext(e), Ext2(e2));
        foreach n in Ngb.size()
            Ngb.next(n.x, n.y, Src(s - (Ngb.size()/2) + n),
                               Ext(e - (Ngb.size()/2) + n),
                               Ext2(e2 - (Ngb.size()/2) + n));
        Ngb.init2(s.x, s.y, Src(s), Ext(e), Ext2(e2));
        foreach n in Ngb.size()
            Ngb.next2(n.x, n.y, Src(s - (Ngb.size()/2) + n),
                                Ext(e - (Ngb.size()/2) + n),
                                Ext2(e2 - (Ngb.size()/2) + n));
        Dst(d) = ngb.result();
    }
}

The requirements on the NgbT template parameter expressed as class definition are:

template<class DstValT, class SrcValT, class ExtValT, class Ext2ValT>
class NgbT
{
public:

    typedef HxTagLoop       IteratorCategory;
    typedef HxTag2Phase     PhaseCategory;

                      NgbT(HxTagList& tags);
                      ~NgbT();

    HxSizes           size();

    void              init(int ix, int iy, SrcValT v1, ExtValT v2, Ext2ValT v3);
    void              next(int nx, int ny, SrcValT v1, ExtValT v2, Ext2ValT v3);

    void              init2(int ix, int iy, SrcValT v1, ExtValT v2, Ext2ValT v3);
    void              next2(int nx, int ny, SrcValT v1, ExtValT v2, Ext2ValT v3);

    DstValT           result() const;

    static HxString   className();
};

Example(s):


Return to patterns.


Generated on Tue Feb 3 14:19:12 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001