00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef MLN_MAKE_WIN_CHAMFER_HH
00027 # define MLN_MAKE_WIN_CHAMFER_HH
00028
00034
00035 # include <cmath>
00036
00037 # include <mln/core/alias/w_window2d_int.hh>
00038 # include <mln/core/alias/w_window2d_float.hh>
00039
00040
00041 namespace mln
00042 {
00043
00044 namespace make
00045 {
00046
00047 template<int d10, int d11>
00048 mln::w_window2d_int
00049 mk_chamfer_3x3_int();
00050
00051 template<int d10, int d11, int d21>
00052 mln::w_window2d_int
00053 mk_chamfer_5x5_int();
00054
00055 mln::w_window2d_float
00056 mk_chamfer_3x3_float(float d10, float d11);
00057
00058 mln::w_window2d_float
00059 mk_chamfer_5x5_float(float d10, float d11, float d21);
00060
00061 mln::w_window2d_float
00062 mk_chamfer_exact();
00063
00064
00065 # ifndef MLN_INCLUDE_ONLY
00066
00067 template<int d10, int d11>
00068 inline
00069 mln::w_window2d_int
00070 mk_chamfer_3x3_int()
00071 {
00072 int ws[] = { d11, d10, d11,
00073 d10, 0, 0,
00074 0, 0, 0 };
00075
00076 return make::w_window2d(ws);
00077 }
00078
00079 template<int d10, int d11, int d21>
00080 inline
00081 mln::w_window2d_int
00082 mk_chamfer_5x5_int()
00083 {
00084 int ws[] = { 0, d21, 0, d21, 0,
00085 d21, d11, d10, d11, d21,
00086 0, d10, 0, 0, 0,
00087 0, 0, 0, 0, 0,
00088 0, 0, 0, 0, 0 };
00089
00090 return make::w_window2d(ws);
00091 }
00092
00093 inline
00094 mln::w_window2d_float
00095 mk_chamfer_3x3_float(float d10, float d11)
00096 {
00097 float ws[] = { d11, d10, d11,
00098 d10, 0, 0,
00099 0, 0, 0 };
00100
00101 return make::w_window2d(ws);
00102 }
00103
00104 inline
00105 mln::w_window2d_float
00106 mk_chamfer_5x5_float(float d10, float d11, float d21)
00107 {
00108 float ws[] = { 0, d21, 0, d21, 0,
00109 d21, d11, d10, d11, d21,
00110 0, d10, 0, 0, 0,
00111 0, 0, 0, 0, 0,
00112 0, 0, 0, 0, 0 };
00113
00114 return make::w_window2d(ws);
00115 }
00116
00117 inline
00118 mln::w_window2d_float
00119 mk_chamfer_exact()
00120 {
00121 float r2 = std::sqrt(2.0f);
00122 float ws[] = { r2, 1, r2,
00123 1, 0, 0,
00124 0, 0, 0 };
00125
00126 return make::w_window2d(ws);
00127 }
00128
00129 # endif // ! MLN_INCLUDE_ONLY
00130
00131 }
00132
00133 }
00134
00135
00136 #endif // ! MLN_MAKE_WIN_CHAMFER_HH