segmentation
All Data Structures Namespaces Files Functions Variables Modules Pages
BgEdge.cpp
1 // Name: BgEdge.cpp
3 // Purpose: BGEdge class functions
4 // Author: Bogdan Georgescu
5 // Modified by:
6 // Created: 06/22/2000
7 // Copyright: (c) Bogdan Georgescu
8 // Version: v0.1
10 
11 #include <math.h>
12 #include "edge/BgEdge.h"
13 #define PI 3.1415926535
14 
15 BgEdge::BgEdge()
16 {
17  nPoints_ = 0;
18  edge_ = 0;
19  next_ = 0;
20  isGradSet_ = false;
21  grad_ = 0;
22  isMarkSet_ = false;
23  mark_ = 0;
24 }
25 
26 BgEdge::~BgEdge()
27 {
28  if (nPoints_>0) delete [] edge_;
29  if (isGradSet_) delete [] grad_;
30  if (isMarkSet_) delete [] mark_;
31 }
32 
33 void BgEdge::SetPoints(float* points, int npoints)
34 {
35  if (nPoints_>0) delete [] edge_;
36  nPoints_ = npoints;
37  edge_=new int[npoints*2];
38 
39  float *its;
40  int *itd;
41  itd=edge_;
42  its=points;
43  for (int i=0; i<2*npoints; i++)
44  *(itd++) = (int) *(its++);
45 }
46 
47 void BgEdge::SetPoints(int* points, int npoints)
48 {
49  if (nPoints_>0) delete [] edge_;
50  nPoints_ = npoints;
51  edge_=new int[npoints*2];
52 
53  int *its;
54  int *itd;
55  itd=edge_;
56  its=points;
57  for (int i=0; i<2*npoints; i++)
58  *(itd++) = *(its++);
59 }
60 
61 void BgEdge::SetGradient(float* grx, float* gry, float* mark, int ncol)
62 {
63  if (isGradSet_ && nPoints_>0) delete [] grad_;
64 
65  grad_ = new double[nPoints_];
66  isGradSet_ = true;
67 
68  double alpha, gx, gy;
69  int* it;
70  it=edge_;
71  int x, y, i, j, nv;
72 
73  for (i=0; i<nPoints_;i++)
74  {
75  x = *(it++);
76  y = *(it++);
77  gx = *(grx+y*ncol+x);
78  gy = *(gry+y*ncol+x);
79  nv=1;
80  for (j=0;j<8;j++)
81  {
82  if (*(mark+(y+gNb8[j][1])*ncol+gNb8[j][0]+x) == 1)
83  {
84  gx += *(grx+(y+gNb8[j][1])*ncol+gNb8[j][0]+x);
85  gy += *(gry+(y+gNb8[j][1])*ncol+gNb8[j][0]+x);
86  }
87  }
88  alpha = atan2(gy,gx);
89  alpha = (alpha<0) ? alpha+PI : alpha;
90  *(grad_+i)=alpha;
91  }
92 }