Go to the documentation of this file.00001
00060 #ifndef __IMPL_POLY2D_HPP__
00061 #define __IMPL_POLY2D_HPP__
00062
00063 #include <cob_3d_segmentation/polygon_extraction/poly2d.h>
00064
00065 namespace cob_3d_segmentation
00066 {
00067 namespace Contour2D
00068 {
00069 int SplineMap[9]={
00070 4, 5, 6,
00071 3, -1, 7,
00072 2, 1, 0
00073
00074
00075
00076
00077 };
00078
00079 spline2D g_Splines[9][256];
00080
00081 bool generateSpline2D()
00082 {
00083 int mapX[]={2,1,0, 0,0, 1, 2,2};
00084 int mapY[]={2,2,2, 1, 0,0,0, 1};
00085
00086
00087 for(int i=0; i<256; i++) {
00088 bool b[8];
00089 for(int j=0; j<8; j++)
00090 b[j]=i&(1<<j);
00091 spline2D s={};
00092 if(!i) {
00093 g_Splines[8][i]=s;
00094 continue;
00095 }
00096 int a=-1;
00097 for(int j=3; j>=0; j--) {
00098 if(b[7-j]) {
00099 a=7-j;
00100 break;}
00101 }
00102 for(int j=0; a==-1&&j<4; j++) {
00103 if(b[j]) {
00104 a=j;
00105 break;}
00106 }
00107 for(int j=3; j>=0; j--) {
00108 if(b[(a+4+j+8)%8]) {
00109 s.v=0;
00110 s.x=mapX[(a+4+j+8)%8]-1;
00111 s.y=mapY[(a+4+j+8)%8]-1;
00112 s.bf=(a+j+8)%8;
00113 a=-1;
00114 break;
00115 }
00116 }
00117 for(int j=0; a!=-1&&j<4; j++) {
00118 if(b[(a+4-j+8)%8]) {
00119 s.v=0;
00120 s.x=mapX[(a+4-j+8)%8]-1;
00121 s.y=mapY[(a+4-j+8)%8]-1;
00122 s.bf=(a-j+8)%8;
00123 break;
00124 }
00125 }
00126 g_Splines[8][i]=s;
00127 }
00128
00129 for(int a=0; a<8; a++) {
00130
00131 for(int i=0; i<256; i++) {
00132 bool b[8];
00133 for(int j=0; j<8; j++)
00134 b[j]=i&(1<<j);
00135 spline2D s={};
00136 if(!i) {
00137 g_Splines[a][i]=s;
00138 continue;
00139 }
00140 bool found=false;
00141 for(int j=3; j>=0; j--) {
00142 if(b[(a+4+j+8)%8]) {
00143 s.v=-j;
00144 s.x=mapX[(a+4+j+8)%8]-1;
00145 s.y=mapY[(a+4+j+8)%8]-1;
00146 s.bf=(a+j+8)%8;
00147 found=true;
00148 break;
00149 }
00150 }
00151 for(int j=0; !found&&j<4; j++) {
00152 if(b[(a+4-j+8)%8]) {
00153 s.v=j;
00154 s.x=mapX[(a+4-j+8)%8]-1;
00155 s.y=mapY[(a+4-j+8)%8]-1;
00156 s.bf=(a-j+8)%8;
00157 break;
00158 }
00159 }
00160 g_Splines[a][i]=s;
00161 }
00162 }
00163
00164 return true;
00165 }
00166
00167 static bool bInit = generateSpline2D();
00168
00169 }
00170 }
00171
00172 #endif