contrib/tbl/vepl2/vepl2_monadic.cxx

Go to the documentation of this file.
00001 // This is tbl/vepl2/vepl2_monadic.cxx
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> // for vxl_byte
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   // byte rgb
00033   if (image->pixel_format() == VIL_PIXEL_FORMAT_RGB_BYTE) {
00034     // vxl_byte is unsigned so nothing happens
00035     img_out->put_view(*(image->get_view()));
00036   }
00037 
00038   // byte greyscale
00039   else if (image->pixel_format() == VIL_PIXEL_FORMAT_BYTE) {
00040     // vxl_byte is unsigned so nothing happens
00041     img_out->put_view(*(image->get_view()));
00042   }
00043 
00044   // short
00045   else if (image->pixel_format() == VIL_PIXEL_FORMAT_UINT_16) {
00046     // vxl_uint_16 is unsigned so nothing happens
00047     img_out->put_view(*(image->get_view()));
00048   }
00049 
00050   // int
00051   else if (image->pixel_format() == VIL_PIXEL_FORMAT_UINT_32) {
00052     // vxl_uint_32 is unsigned so nothing happens
00053     img_out->put_view(*(image->get_view()));
00054   }
00055 
00056   // float
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   // double
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   // float
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   // double
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   // byte greyscale
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   // short
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   // int
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   // float
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   // double
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   // byte greyscale
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   // short
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   // int
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   // float
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   // double
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 

Generated on Thu Nov 20 05:13:25 2008 for contrib/tbl/vepl2 by  doxygen 1.5.1