00001
00002 #include "vepl2_monadic.h"
00003 #include <vepl2/accessors/vipl_accessors_vil_image_view_base.h>
00004 #include <vipl/vipl_monadic.h>
00005 #include <vil/vil_image_view.h>
00006 #include <vil/vil_new.h>
00007 #include <vcl_cmath.h>
00008 #include <vcl_iostream.h>
00009 #include <vxl_config.h>
00010
00011 float abs_float(float const& a) { return (a<0) ? -a : a; }
00012 double abs_double(double const& a) { return vcl_fabs(a); }
00013 float sqrt_float(float const& a) { return (a<0) ? -vcl_sqrt(a) : vcl_sqrt(a); }
00014 double sqrt_double(double const& a) { return (a<0) ? -vcl_sqrt(a) : vcl_sqrt(a); }
00015 vxl_byte sqr_ubyte(vxl_byte const& a) { return a*a; }
00016 float sqr_float(float const& a) { return a*a; }
00017 vxl_uint_16 sqr_short(vxl_uint_16 const& a) { return a*a; }
00018 vxl_uint_32 sqr_int(vxl_uint_32 const& a) { return a*a; }
00019 double sqr_double(double const& a) { return a*a; }
00020 static double shift_=0.0, scale_=1.0;
00021 vxl_byte shear_ubyte(vxl_byte const& a) { return vxl_byte((a+shift_)*scale_); }
00022 vxl_uint_16 shear_short(vxl_uint_16 const& a) { return vxl_uint_16((a+shift_)*scale_); }
00023 vxl_uint_32 shear_int(vxl_uint_32 const& a) { return vxl_uint_32((a+shift_)*scale_); }
00024 float shear_float(float const& a) { return float((a+shift_)*scale_); }
00025 double shear_double(double const& a) { return (a+shift_)*scale_; }
00026
00027
00028 vil_image_resource_sptr vepl2_monadic_abs(vil_image_resource_sptr image)
00029 {
00030 vil_image_resource_sptr img_out = vil_new_image_resource(image->ni(), image->nj(), image->nplanes(), image->pixel_format());
00031
00032
00033 if (image->pixel_format() == VIL_PIXEL_FORMAT_RGB_BYTE) {
00034
00035 img_out->put_view(*(image->get_view()));
00036 }
00037
00038
00039 else if (image->pixel_format() == VIL_PIXEL_FORMAT_BYTE) {
00040
00041 img_out->put_view(*(image->get_view()));
00042 }
00043
00044
00045 else if (image->pixel_format() == VIL_PIXEL_FORMAT_UINT_16) {
00046
00047 img_out->put_view(*(image->get_view()));
00048 }
00049
00050
00051 else if (image->pixel_format() == VIL_PIXEL_FORMAT_UINT_32) {
00052
00053 img_out->put_view(*(image->get_view()));
00054 }
00055
00056
00057 else if (image->pixel_format() == VIL_PIXEL_FORMAT_FLOAT) {
00058 vil_image_view<float> in = image->get_view();
00059 vil_image_view<float> out = image->get_copy_view();
00060 vipl_monadic<vil_image_view_base,vil_image_view_base,float,float> op(abs_float);
00061 op.put_in_data_ptr(&in);
00062 op.put_out_data_ptr(&out);
00063 op.filter();
00064 img_out->put_view(out);
00065 }
00066
00067
00068 else if (image->pixel_format() == VIL_PIXEL_FORMAT_DOUBLE) {
00069 vil_image_view<double> in = image->get_view();
00070 vil_image_view<double> out = image->get_copy_view();
00071 vipl_monadic<vil_image_view_base,vil_image_view_base,double,double> op(abs_double);
00072 op.put_in_data_ptr(&in);
00073 op.put_out_data_ptr(&out);
00074 op.filter();
00075 img_out->put_view(out);
00076 }
00077
00078
00079 else
00080 vcl_cerr << __FILE__ ": vepl2_monadic_abs() not implemented for " << image << '\n';
00081
00082 return img_out;
00083 }
00084
00085 vil_image_resource_sptr vepl2_monadic_sqrt(vil_image_resource_sptr image)
00086 {
00087 vil_image_resource_sptr img_out = vil_new_image_resource(image->ni(), image->nj(), image->nplanes(), image->pixel_format());
00088
00089
00090 if (image->pixel_format() == VIL_PIXEL_FORMAT_FLOAT) {
00091 vil_image_view<float> in = image->get_view();
00092 vil_image_view<float> out = image->get_copy_view();
00093 vipl_monadic<vil_image_view_base,vil_image_view_base,float,float> op(sqrt_float);
00094 op.put_in_data_ptr(&in);
00095 op.put_out_data_ptr(&out);
00096 op.filter();
00097 img_out->put_view(out);
00098 }
00099
00100
00101 else if (image->pixel_format() == VIL_PIXEL_FORMAT_DOUBLE) {
00102 vil_image_view<double> in = image->get_view();
00103 vil_image_view<double> out = image->get_copy_view();
00104 vipl_monadic<vil_image_view_base,vil_image_view_base,double,double> op(sqrt_double);
00105 op.put_in_data_ptr(&in);
00106 op.put_out_data_ptr(&out);
00107 op.filter();
00108 img_out->put_view(out);
00109 }
00110
00111
00112 else
00113 vcl_cerr << __FILE__ ": vepl2_monadic_sqrt() not implemented for " << image << '\n';
00114
00115 return img_out;
00116 }
00117
00118 vil_image_resource_sptr vepl2_monadic_sqr(vil_image_resource_sptr image)
00119 {
00120 vil_image_resource_sptr img_out = vil_new_image_resource(image->ni(), image->nj(), image->nplanes(), image->pixel_format());
00121
00122
00123 if (image->pixel_format() == VIL_PIXEL_FORMAT_BYTE) {
00124 vil_image_view<vxl_byte> in = image->get_view();
00125 vil_image_view<vxl_byte> out = image->get_copy_view();
00126 vipl_monadic<vil_image_view_base,vil_image_view_base,vxl_byte,vxl_byte> op(sqr_ubyte);
00127 op.put_in_data_ptr(&in);
00128 op.put_out_data_ptr(&out);
00129 op.filter();
00130 img_out->put_view(out);
00131 }
00132
00133
00134 else if (image->pixel_format() == VIL_PIXEL_FORMAT_UINT_16) {
00135 vil_image_view<vxl_uint_16> in = image->get_view();
00136 vil_image_view<vxl_uint_16> out = image->get_copy_view();
00137 vipl_monadic<vil_image_view_base,vil_image_view_base,vxl_uint_16,vxl_uint_16> op(sqr_short);
00138 op.put_in_data_ptr(&in);
00139 op.put_out_data_ptr(&out);
00140 op.filter();
00141 img_out->put_view(out);
00142 }
00143
00144
00145 else if (image->pixel_format() == VIL_PIXEL_FORMAT_UINT_32) {
00146 vil_image_view<vxl_uint_32> in = image->get_view();
00147 vil_image_view<vxl_uint_32> out = image->get_copy_view();
00148 vipl_monadic<vil_image_view_base,vil_image_view_base,vxl_uint_32,vxl_uint_32> op(sqr_int);
00149 op.put_in_data_ptr(&in);
00150 op.put_out_data_ptr(&out);
00151 op.filter();
00152 img_out->put_view(out);
00153 }
00154
00155
00156 else if (image->pixel_format() == VIL_PIXEL_FORMAT_FLOAT) {
00157 vil_image_view<float> in = image->get_view();
00158 vil_image_view<float> out = image->get_copy_view();
00159 vipl_monadic<vil_image_view_base,vil_image_view_base,float,float> op(sqr_float);
00160 op.put_in_data_ptr(&in);
00161 op.put_out_data_ptr(&out);
00162 op.filter();
00163 img_out->put_view(out);
00164 }
00165
00166
00167 else if (image->pixel_format() == VIL_PIXEL_FORMAT_DOUBLE) {
00168 vil_image_view<double> in = image->get_view();
00169 vil_image_view<double> out = image->get_copy_view();
00170 vipl_monadic<vil_image_view_base,vil_image_view_base,double,double> op(sqr_double);
00171 op.put_in_data_ptr(&in);
00172 op.put_out_data_ptr(&out);
00173 op.filter();
00174 img_out->put_view(out);
00175 }
00176
00177
00178 else
00179 vcl_cerr << __FILE__ ": vepl2_monadic_sqr() not implemented for " << image << '\n';
00180
00181 return img_out;
00182 }
00183
00184 vil_image_resource_sptr vepl2_monadic_shear(vil_image_resource_sptr image, double shift, double scale)
00185 {
00186 shift_ = shift; scale_ = scale;
00187 vil_image_resource_sptr img_out = vil_new_image_resource(image->ni(), image->nj(), image->nplanes(), image->pixel_format());
00188
00189
00190 if (image->pixel_format() == VIL_PIXEL_FORMAT_BYTE) {
00191 vil_image_view<vxl_byte> in = image->get_view();
00192 vil_image_view<vxl_byte> out = image->get_copy_view();
00193 vipl_monadic<vil_image_view_base,vil_image_view_base,vxl_byte,vxl_byte> op(shear_ubyte);
00194 op.put_in_data_ptr(&in);
00195 op.put_out_data_ptr(&out);
00196 op.filter();
00197 img_out->put_view(out);
00198 }
00199
00200
00201 else if (image->pixel_format() == VIL_PIXEL_FORMAT_UINT_16) {
00202 vil_image_view<vxl_uint_16> in = image->get_view();
00203 vil_image_view<vxl_uint_16> out = image->get_copy_view();
00204 vipl_monadic<vil_image_view_base,vil_image_view_base,vxl_uint_16,vxl_uint_16> op(shear_short);
00205 op.put_in_data_ptr(&in);
00206 op.put_out_data_ptr(&out);
00207 op.filter();
00208 img_out->put_view(out);
00209 }
00210
00211
00212 else if (image->pixel_format() == VIL_PIXEL_FORMAT_UINT_32) {
00213 vil_image_view<vxl_uint_32> in = image->get_view();
00214 vil_image_view<vxl_uint_32> out = image->get_copy_view();
00215 vipl_monadic<vil_image_view_base,vil_image_view_base,vxl_uint_32,vxl_uint_32> op(shear_int);
00216 op.put_in_data_ptr(&in);
00217 op.put_out_data_ptr(&out);
00218 op.filter();
00219 img_out->put_view(out);
00220 }
00221
00222
00223 else if (image->pixel_format() == VIL_PIXEL_FORMAT_FLOAT) {
00224 vil_image_view<float> in = image->get_view();
00225 vil_image_view<float> out = image->get_copy_view();
00226 vipl_monadic<vil_image_view_base,vil_image_view_base,float,float> op(shear_float);
00227 op.put_in_data_ptr(&in);
00228 op.put_out_data_ptr(&out);
00229 op.filter();
00230 img_out->put_view(out);
00231 }
00232
00233
00234 else if (image->pixel_format() == VIL_PIXEL_FORMAT_DOUBLE) {
00235 vil_image_view<double> in = image->get_view();
00236 vil_image_view<double> out = image->get_copy_view();
00237 vipl_monadic<vil_image_view_base,vil_image_view_base,double,double> op(shear_double);
00238 op.put_in_data_ptr(&in);
00239 op.put_out_data_ptr(&out);
00240 op.filter();
00241 img_out->put_view(out);
00242 }
00243
00244
00245 else
00246 vcl_cerr << __FILE__ ": vepl2_monadic_shear() not implemented for " << image << '\n';
00247
00248 return img_out;
00249 }
00250