#ifndef IM3DMATHS_HEADER #define IM3DMATHS_HEADER 1 ///////////////////////////////////////////////////////////////////// //! userlevel = Normal //! docentry="Image3D" //! rcsid="$Id: Im3dMaths.hh,v 1.2 1999/11/05 15:33:54 ees1cg Exp $" //! file="amma/Image3D/Im3dMaths.hh" //! lib=Image3D //! author="Manuel Segovia" //! date= "11/11/98" #include "amma/Image3d.hh" #include "amma/SArr3Iter.hh" #include "amma/SArr3Iter2.hh" #include "amma/SArr3Iter3.hh" template Image3dC operator+(const Image3dC & a, const Image3dC & b ); //: overload of the adding function template Image3dC operator-(const Image3dC & a, const Image3dC & b); //: overload of the substracting function template Image3dC operator*(const Image3dC & a, const Image3dC & b); //: overload of the multiplication function template Image3dC operator/(const Image3dC & a, const Image3dC & b); //: overload of the division function template Image3dC sqr(const Image3dC & in); //: overload of sqr template Image3dC sqrt(const Image3dC & in); //: overload of sqrt template Image3dC operator+(const Image3dC & a, const Image3dC & b ) { Image3dC result(a.Dim1(),a.Dim2(),a.Dim3(),a.SubSamplingZ(),a.SubSamplingY()); SArray3dIter3C< DataT, DataT, DataT> it(const_cast &>(a), const_cast &>(b), result); for( it.First() ;it.IsElm();it.Next() ) it.Data3() = it.Data1() + it.Data2(); return result; } template Image3dC operator-(const Image3dC & a, const Image3dC & b) { Image3dC result(a.Dim1(),a.Dim2(),a.Dim3(),a.SubSamplingZ(),a.SubSamplingY()); SArray3dIter3C< DataT, DataT, DataT> it(const_cast &>(a), const_cast &>(b), result); for( it.First() ;it.IsElm();it.Next() ) it.Data3() = it.Data1() - it.Data2(); return result; } template Image3dC operator*(const Image3dC & a, const Image3dC & b) { Image3dC result(a.Dim1(),a.Dim2(),a.Dim3(),a.SubSamplingZ(),a.SubSamplingY()); SArray3dIter3C< DataT, DataT, DataT> it(const_cast &>(a), const_cast &>(b), result); for( it.First() ;it.IsElm();it.Next() ) it.Data3() = it.Data1() * it.Data2(); return result; } template Image3dC operator/(const Image3dC & a, const Image3dC & b) { Image3dC result(a.Dim1(),a.Dim2(),a.Dim3(),a.SubSamplingZ(),a.SubSamplingY()); SArray3dIter3C< DataT, DataT, DataT> it(const_cast &>(a), const_cast &>(b), result); for( it.First() ;it.IsElm();it.Next() ) it.Data3() = it.Data1() / it.Data2(); return result; } template Image3dC sqr(const Image3dC & in) { Image3dC result(in.Dim1(), in.Dim2(), in.Dim3(), in.SubSamplingZ(), in.SubSamplingY()); for(SArray3dIter2C it(const_cast &>(in), result); it.IsElm(); it.Next()) it.Data2() = it.Data1()*it.Data1(); return result; } template Image3dC sqrt(const Image3dC & in) { Image3dC result(in.Dim1(), in.Dim2(), in.Dim3(), in.SubSamplingZ(), in.SubSamplingY()); for(SArray3dIter2C it(const_cast &>(in), result); it.IsElm(); it.Next()) it.Data2() = sqrt(it.Data1()); return result; } #endif