00001 /*!@file CUDA/CudaCutPaste.H Cut+paste operations from/to CudaImage subregions */ 00002 00003 // //////////////////////////////////////////////////////////////////// // 00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2001 by the // 00005 // University of Southern California (USC) and the iLab at USC. // 00006 // See http://iLab.usc.edu for information about this project. // 00007 // //////////////////////////////////////////////////////////////////// // 00008 // Major portions of the iLab Neuromorphic Vision Toolkit are protected // 00009 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency // 00010 // in Visual Environments, and Applications'' by Christof Koch and // 00011 // Laurent Itti, California Institute of Technology, 2001 (patent // 00012 // pending; application number 09/912,225 filed July 23, 2001; see // 00013 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status). // 00014 // //////////////////////////////////////////////////////////////////// // 00015 // This file is part of the iLab Neuromorphic Vision C++ Toolkit. // 00016 // // 00017 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can // 00018 // redistribute it and/or modify it under the terms of the GNU General // 00019 // Public License as published by the Free Software Foundation; either // 00020 // version 2 of the License, or (at your option) any later version. // 00021 // // 00022 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope // 00023 // that it will be useful, but WITHOUT ANY WARRANTY; without even the // 00024 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // 00025 // PURPOSE. See the GNU General Public License for more details. // 00026 // // 00027 // You should have received a copy of the GNU General Public License // 00028 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write // 00029 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, // 00030 // Boston, MA 02111-1307 USA. // 00031 // //////////////////////////////////////////////////////////////////// // 00032 // 00033 // Primary maintainer for this file: Rob Peters <rjpeters@klab.caltech.edu> 00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/CUDA/CudaCutPaste.H $ 00035 // $Id: CudaCutPaste.H 12962 2010-03-06 02:13:53Z irock $ 00036 // 00037 00038 #ifndef CUDA_CUDACUTPASTE_H_DEFINED 00039 #define CUDA_CUDACUTPASTE_H_DEFINED 00040 00041 #include "Image/PixelsTypes.H" 00042 00043 class Dims; 00044 template <class T> class Point2D; 00045 class Rectangle; 00046 template <class T> class CudaImage; 00047 00048 //! Extract a subimage from the input image. 00049 /*! The upper left corner of the subimage is given by a Point2D<int>, and the 00050 size of the subimage is given by the Dims. If zerofill is false, then 00051 the rectangle given by Point2D<int>+Dims must be wholly contained within the 00052 bounds of the input image. If zerofill is true, then any output region 00053 that lies outside the bounds of the input will be zero-filled (where 00054 zero means the default value for type T). */ 00055 CudaImage<float> cudaCrop(const CudaImage<float>& src, 00056 const Point2D<int>& upperLeft, const Dims& size, 00057 const bool zerofill = false); 00058 00059 //! Overload of crop() using a Rectangle instead of a Point2D<int>+Dims. 00060 CudaImage<float> cudaCrop(const CudaImage<float>& src, 00061 const Rectangle& rect, const bool zerofill = false); 00062 00063 //! Shift an image by a non even amount of pixels, need to interpolate 00064 CudaImage<float> cudaShiftImage(const CudaImage<float>& src, const float dx, const float dy); 00065 00066 //! Paste an image onto an existing image 00067 void cudaInplacePaste(CudaImage<float>& dst, 00068 const CudaImage<float>& img, const Point2D<int>& pos); 00069 00070 //! Paste a PixRGB image onto an existing image 00071 void cudaInplacePaste(CudaImage<PixRGB<float> >& dst, 00072 const CudaImage<PixRGB<float> >& img, const Point2D<int>& pos); 00073 00074 //! Overlay an image onto an existing image, only overwriting an old pixel if new pixel is nonzero 00075 void cudaInplaceOverlay(CudaImage<float>& dst, const CudaImage<float>& img, const Point2D<int>& pos); 00076 00077 //! Overlay a PixRGB image onto an existing image, only overwriting an old pixel if new pixel is nonzero 00078 void cudaInplaceOverlay(CudaImage<PixRGB<float> >& dst, const CudaImage<PixRGB<float> >& img, const Point2D<int>& pos); 00079 00080 #endif