naiveSnake.h

Go to the documentation of this file.
00001 
00015 #ifndef _DLRCOMPUTERVISION_NAIVESNAKE_H_
00016 #define _DLRCOMPUTERVISION_NAIVESNAKE_H_
00017 
00018 #include <vector>
00019 #include <dlrComputerVision/image.h>
00020 #include <dlrNumeric/vector2D.h>
00021 
00022 namespace dlr {
00023 
00024   namespace computerVision {
00025 
00026     enum SnakeStrategy {
00027       SNAKE_EUCLIDEAN_DISTANCE
00028     };
00029 
00030 
00031     class Snake {
00032     public:
00033 
00034       Snake();
00035 
00036 
00037       ~Snake() {}
00038 
00039 
00040       void
00041       enableCornerAdditionAndDeletion(bool enableFlag=true);
00042 
00043 
00044       std::vector<double>
00045       getBetaVector() {return m_betaVector;}
00046       
00047       
00048       bool
00049       isConverged() {return m_isConverged;}
00050 
00051         
00052       std::vector<Vector2D>
00053       run();
00054 
00055       
00056       std::vector<Vector2D>
00057       runOneIteration();
00058       
00059       
00060       void
00061       setBendingConstant(double beta);
00062 
00063 
00064       void
00065       setCornerAdditionAngle(double theta);
00066 
00067 
00068       void
00069       setCornerDeletionAngle(double theta);
00070 
00071 
00072       void
00073       setClosedCurve(bool isClosed=true)
00074         {m_isClosed = isClosed; m_isConverged = false;}
00075 
00076 
00077       void
00078       setExternalForceConstant(double kappa)
00079         {m_kappa = kappa; m_isConverged = false;}
00080 
00081     
00082       // void
00083       // setFixedEndpoints(bool isFixed=true)
00084       //   {m_isFixed = isFixed; m_isConverged = false;}
00085 
00086 
00087       void
00088       setInterestImage(const Image<GRAY1>& interestImage);
00089 
00090 
00091       void
00092       setMaxIterations(size_t maxIterations) {m_maxIterations = maxIterations;}
00093 
00094 
00095       void
00096       setMaxSnakeSize(size_t maxSize) {m_maxSnakeSize = maxSize;}
00097 
00098 
00099       void
00100       setMaximumSpanLength(size_t spanLength)
00101         {m_maxSpanLength = spanLength; m_isConverged = false;}
00102 
00103 
00104       void
00105       setMinimumSpanLength(size_t spanLength)
00106         {m_minSpanLength = spanLength; m_isConverged = false;}
00107       
00108 
00109       void
00110       setSeedPoints(const std::vector<Vector2D>& seedPoints);
00111 
00112 
00113       void
00114       setSeedPoints(const std::vector<Vector2D>& seedPoints,
00115                     const std::vector<bool> cornerFlags);
00116       
00117 
00118       void
00119       setStepsPerIteration(size_t numSteps) {m_contourIterations = numSteps;}
00120     
00121 
00122       void
00123       setStretchingConstant(double alpha)
00124         {m_alpha = alpha; m_isConverged = false;}
00125 
00126 
00127       void
00128       setViscosityConstant(double gamma)
00129         {m_gamma = gamma; m_isConverged = false;}
00130 
00131 
00132     private:
00133 
00134       void
00135       addResampledSpan(std::vector<Vector2D>& snake,
00136                        std::vector<double>& betaVector,
00137                        const Vector2D& newPoint,
00138                        double newBeta,
00139                        bool isLast=false);
00140 
00141 
00142       void
00143       adjustBetas(const std::vector<Vector2D>& snake,
00144                   std::vector<double>& betaVector);
00145 
00146       
00147       Array2D<double>
00148       buildForceBalanceMatrix(size_t numberOfSnakePoints);
00149 
00150       
00151       void
00152       buildForceBalanceRHS(const std::vector<Vector2D>& snake,
00153                            Array1D<double>& xRHS,
00154                            Array1D<double>& yRHS);
00155 
00156       
00157       bool
00158       isConverged(const std::vector<Vector2D>& snake,
00159                   const std::vector<Vector2D>& oldSnake);
00160     
00161 
00162       std::pair< std::vector<Vector2D>, std::vector<double> >
00163       resampleSnake();
00164 
00165       void
00166       updateSnakePosition(std::vector<Vector2D>& snake);
00167     
00168       
00169       double m_alpha;
00170       double m_beta;
00171       std::vector<double> m_betaVector;
00172       size_t m_contourIterations;
00173       double m_cornerAdditionThreshold;
00174       double m_cornerDeletionThreshold;
00175       Array2D<double> m_externalForceGradientX;
00176       Array2D<double> m_externalForceGradientY;
00177       Array2D<double> m_forceBalanceMatrix;
00178       double m_gamma;
00179       bool m_isClosed;
00180       bool m_isConverged;
00181       bool m_isFixed;
00182       double m_kappa;
00183       size_t m_maxIterations;
00184       size_t m_maxSnakeSize;
00185       double m_maxSpanLength;
00186       double m_minSpanLength;
00187       std::vector<Vector2D> m_snake;
00188     };
00189 
00190   } // namespace computerVision
00191   
00192 } // namespace dlr
00193 
00194 
00195 /* ============ Definitions of inline & template functions ============ */
00196 
00197 
00198 #include <cmath>
00199 
00200 namespace dlr {
00201 
00202   
00203 } // namespace dlr
00204 
00205 #endif /* #ifndef _DLRCOMPUTERVISION_NAIVESNAKE_H_ */

Generated on Mon Jul 9 20:34:03 2007 for dlrLibs Utility Libraries by  doxygen 1.5.2