CVR-Lib last update 20 Sep 2009

cvrAreaPoints.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 1998-2004
00003  * Lehrstuhl fuer Technische Informatik, RWTH-Aachen, Germany
00004  *
00005  *
00006  * This file is part of the Computer Vision and Robotics Library (CVR-Lib)
00007  *
00008  * The CVR-Lib is free software; you can redistribute it and/or
00009  * modify it under the terms of the BSD License.
00010  *
00011  * All rights reserved.
00012  *
00013  * Redistribution and use in source and binary forms, with or without
00014  * modification, are permitted provided that the following conditions are met:
00015  *
00016  * 1. Redistributions of source code must retain the above copyright notice,
00017  *    this list of conditions and the following disclaimer.
00018  *
00019  * 2. Redistributions in binary form must reproduce the above copyright notice,
00020  *    this list of conditions and the following disclaimer in the documentation
00021  *    and/or other materials provided with the distribution.
00022  *
00023  * 3. Neither the name of the authors nor the names of its contributors may be
00024  *    used to endorse or promote products derived from this software without
00025  *    specific prior written permission.
00026  *
00027  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00028  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00029  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00030  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00031  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00032  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00033  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00034  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00035  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00036  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00037  * POSSIBILITY OF SUCH DAMAGE.
00038  */
00039 
00040 
00041 
00042 /**
00043  * \file   cvrAreaPoints.h
00044  *         Declares areaPoints
00045  * \author LTI
00046  * \date   19.08.1998
00047  *
00048  * $Id: cvrAreaPoints.h,v 1.4 2007/09/24 04:01:11 alvarado Exp $
00049  */
00050 
00051 #ifndef _CVR_AREA_POINTS_H
00052 #define _CVR_AREA_POINTS_H
00053 
00054 #include "cvrIoHandler.h"
00055 #include "cvrPointList.h"
00056 #include "cvrBorderPoints.h"
00057 #include "cvrIoPoints.h"
00058 #include "cvrMatrix.h"
00059 #include "cvrRectangle.h"
00060 
00061 namespace cvr {
00062 
00063   class ioPoints;
00064   class borderPoints;
00065 
00066   /**
00067    * List of all points within an area.
00068    *
00069    * areaPoints is a ipointList that contains all points that belong to
00070    * a specified area.
00071    *
00072    * For the explanation of the contour description in this class, see
00073    * following image:
00074    *
00075    * \code
00076    *   -- 00000000001111111111222222222233
00077    *   -- 01234567890123456789012345678901
00078    *   00 --------------------------------
00079    *   01 --------------------------------
00080    *   02 --------------------------------
00081    *   03 --------BBBB------BBBB----------
00082    *   04 -------B****BBB----B**B---------
00083    *   05 -------B*******B---B***B--------
00084    *   06 ------B*******B-----B*B---------
00085    *   07 -------B*******BBBBB**B---------
00086    *   08 ---------B*************B--------
00087    *   09 --------B**----*********B-------
00088    *   10 --------B**-----********B-------
00089    *   11 -------B**-----*******BB--------
00090    *   12 ------B**-----*******B----------
00091    *   13 ------B**-------******BB--------
00092    *   14 -----B**---------*******B-------
00093    *   15 -----B**--------*********B------
00094    *   16 ----B**-------**********BB------
00095    *   17 ---B***----*******----BB--------
00096    *   18 ----BBBBBBBBB***  --*B----------
00097    *   19 -------------BBBBBBBB-----------
00098    *   20 --------------------------------
00099    *   21 --------------------------------
00100    *   22 --------------------------------
00101    *   23 --------------------------------
00102    *
00103    *  "-" means background and the rest is part of the object.
00104    *  "B" indicates a borderpoint.
00105    *  \endcode
00106    *
00107    *  This contour class allows three representations of a contour:
00108    *  - ioPoints. It contains all input and output points for
00109    *    each line.  For example, for the previous image:
00110    *    (8,3)(11,3)(18,3)(21,3)(7,4)(14,4)(19,4)(22,4)...
00111    *    Note that every IO-point is a border point, but not all border
00112    *    points are IO-points.
00113    *  - borderPoints.  It contains a list of the points at the border.
00114    *    Beginning with the point at (8,3) the chain code for our example
00115    *    image is:
00116    *    (8,3)(9,3)(10,3)(11,3)(12,4)(13,4)(14,4)(15,5)(14,6)...
00117    *  - areaPoints.  It contains all points in the object.
00118    *
00119    *  @see cvr::ioPoints, cvr::borderPoints
00120    *
00121    *  @ingroup gAggregate
00122    *  @ingroup gShape
00123    */
00124   class areaPoints : public ipointList {
00125 
00126   public:
00127     /**
00128      * Default constructor. empty areaPoints
00129      */
00130     areaPoints();
00131 
00132     /**
00133      * Copy constructor
00134      */
00135     areaPoints(const areaPoints& other);
00136 
00137     /**
00138      * Destructor
00139      */
00140     virtual ~areaPoints();
00141 
00142     /**
00143      * Extracts areaPoints from borderPoints
00144      */
00145     areaPoints& castFrom(const borderPoints& theBorderPoints);
00146 
00147     /**
00148      * Extracts areaPoints from ioPoints
00149      */
00150     areaPoints& castFrom(const ioPoints& theIoPoints);
00151 
00152     /**
00153      * Extracts areaPoints from the given polygonPoints
00154      */
00155 //     areaPoints& castFrom(const polygonPoints& thePolyPoints);
00156 
00157     /**
00158      * Copy \c other areaPoints into these.
00159      */
00160     areaPoints& copy(const areaPoints& other);
00161 
00162     /**
00163      * Assigment operator (alias for copy(other)).
00164      * @param other the pointList to be copied
00165      * @return a reference to the actual pointList
00166      */
00167     inline areaPoints& operator=(const areaPoints& other);
00168 
00169     /**
00170      * Returns the name of this type.
00171      */
00172     virtual const std::string& name() const;
00173 
00174     /**
00175      * Create a clone of the areaPoints
00176      *
00177      * @return a pointer to a copy of the areaPoints.
00178      */
00179     virtual areaPoints* clone() const;
00180 
00181     /**
00182      * Create a new instance of areaPoints.
00183      *
00184      * @return a pointer to a copy of the areaPoints
00185      */
00186     virtual areaPoints* newInstance() const;
00187 
00188     /**
00189      * Extracts areaPoints from the given mask.
00190      *
00191      * This function assumes that the mask contains JUST ONE connected
00192      * object.  To get the biggest object on the mask see
00193      * cvr::objectsFromMask or cvr::fastRelabeling.
00194      */
00195     bool extractFromMask(const matrix<ubyte>& mask);
00196 
00197     /**
00198      * Generate mask from the areaPoints.
00199      *
00200      * The dimensions of the resulting mask are the smallest rectangle to
00201      * contain the point (0,0) (optional) and all points in this list, plus
00202      * 1 pixel in both width and heigth.  If the given mask is bigger than
00203      * this size, its dimensions will be kept.
00204      *
00205      * If the boundary of the point list is not up to date, it can
00206      * be calculated if specified by the arguments:
00207      * @param mask The calculated mask will be stored here
00208      * @param computeBoundary If false, the internal boundary of the
00209      *    point list will be used, otherwise the boundary
00210      *    will be calculated (but NOT updated!!!).
00211      * @param exactBoundaryDimensions If true, the dimensions of the resulting
00212      *    mask will be the smallest rectangle to contain only the points in
00213      *    this list. The origin (0,0) may not be included, therefore a 1:1
00214      *    correspondence of coordinates will generally not be given.
00215      * @param keepMaskData if false, the mask will be initialized with
00216      *                     zero before getting the area mask.  If true,
00217      *                     the previous mask data is not deleted, but
00218      *                     the mask will be resized if necessary.
00219      * @return true if successful, false otherwise.
00220      */
00221     bool generateMask(matrix<ubyte>& mask,
00222                       const bool computeBoundary=true,
00223                       const bool exactBoundaryDimensions=false,
00224                       const bool keepMaskData=false) const;
00225 
00226     /**
00227      * Compute intersection area with a rectangle
00228      */
00229     int intersectionArea(const irectangle& rect) const;
00230   };
00231 
00232 }
00233 
00234 #include "cvrAreaPoints_inline.h"
00235 
00236 #endif
00237 
00238 
00239 

Generated on Sun Sep 20 22:07:58 2009 for CVR-Lib by Doxygen 1.5.8