Go to the documentation of this file.00001
00002 #include "vepl_median.h"
00003 #include <vcl_iostream.h>
00004 #include <vepl/accessors/vipl_accessors_vil_image_view_base.h>
00005 #include <vipl/vipl_median.h>
00006 #include <vil/vil_image_view.h>
00007 #include <vil/vil_pixel_format.h>
00008 #include <vil/vil_plane.h>
00009 #include <vil/vil_new.h>
00010 #include <vxl_config.h>
00011
00012 vil_image_resource_sptr vepl_median(vil_image_resource_sptr image, float radius)
00013 {
00014 vil_image_resource_sptr img_out = vil_new_image_resource(image->ni(), image->nj(), image->nplanes(), image->pixel_format());
00015
00016
00017
00018 if (image->nplanes() > 1) {
00019 if (image->pixel_format() == VIL_PIXEL_FORMAT_BYTE) {
00020 vil_image_view<vxl_byte> out = image->get_copy_view();
00021 vil_image_view<vxl_byte> in = image->get_view();
00022 vipl_median<vil_image_view_base,vil_image_view_base,vxl_byte,vxl_byte> op(radius);
00023 for (unsigned int p=0; p<image->nplanes(); ++p) {
00024 vil_image_view<vxl_byte> i = vil_plane(in,p), o = vil_plane(out,p);
00025 op.put_in_data_ptr(&i); op.put_out_data_ptr(&o); op.filter();
00026 }
00027 img_out->put_view(out);
00028 }
00029 else
00030 vcl_cerr << __FILE__ ": vepl_dilate_disk() not implemented for multi-planar " << image << '\n';
00031 }
00032
00033
00034 else if (image->pixel_format() == VIL_PIXEL_FORMAT_BYTE) {
00035 vil_image_view<vxl_byte> in = image->get_view();
00036 vil_image_view<vxl_byte> out = image->get_copy_view();
00037 vipl_median<vil_image_view_base,vil_image_view_base,vxl_byte,vxl_byte> op(radius);
00038 op.put_in_data_ptr(&in);
00039 op.put_out_data_ptr(&out);
00040 op.filter();
00041 img_out->put_view(out);
00042 }
00043
00044
00045 else if (image->pixel_format() == VIL_PIXEL_FORMAT_RGB_BYTE) {
00046 vil_image_view<vxl_byte> in = image->get_view();
00047 vil_image_view<vxl_byte> out = image->get_copy_view();
00048 vipl_median<vil_image_view_base,vil_image_view_base,vxl_byte,vxl_byte> op(radius);
00049 op.put_in_data_ptr(&in);
00050 op.put_out_data_ptr(&out);
00051 op.filter();
00052 img_out->put_view(out);
00053 }
00054
00055
00056 else if (image->pixel_format() == VIL_PIXEL_FORMAT_UINT_16) {
00057 vil_image_view<vxl_uint_16> in = image->get_view();
00058 vil_image_view<vxl_uint_16> out = image->get_copy_view();
00059 vipl_median<vil_image_view_base,vil_image_view_base,vxl_uint_16,vxl_uint_16> op(radius);
00060 op.put_in_data_ptr(&in);
00061 op.put_out_data_ptr(&out);
00062 op.filter();
00063 img_out->put_view(out);
00064 }
00065
00066
00067 else if (image->pixel_format() == VIL_PIXEL_FORMAT_UINT_32) {
00068 vil_image_view<vxl_uint_32> in = image->get_view();
00069 vil_image_view<vxl_uint_32> out = image->get_copy_view();
00070 vipl_median<vil_image_view_base,vil_image_view_base,vxl_uint_32,vxl_uint_32> op(radius);
00071 op.put_in_data_ptr(&in);
00072 op.put_out_data_ptr(&out);
00073 op.filter();
00074 img_out->put_view(out);
00075 }
00076
00077
00078 else if (image->pixel_format() == VIL_PIXEL_FORMAT_FLOAT) {
00079 vil_image_view<float> in = image->get_view();
00080 vil_image_view<float> out = image->get_copy_view();
00081 vipl_median<vil_image_view_base,vil_image_view_base,float,float> op(radius);
00082 op.put_in_data_ptr(&in);
00083 op.put_out_data_ptr(&out);
00084 op.filter();
00085 img_out->put_view(out);
00086 }
00087
00088
00089 else if (image->pixel_format() == VIL_PIXEL_FORMAT_DOUBLE) {
00090 vil_image_view<double> in = image->get_view();
00091 vil_image_view<double> out = image->get_copy_view();
00092 vipl_median<vil_image_view_base,vil_image_view_base,double,double> op(radius);
00093 op.put_in_data_ptr(&in);
00094 op.put_out_data_ptr(&out);
00095 op.filter();
00096 img_out->put_view(out);
00097 }
00098
00099
00100 else
00101 vcl_cerr << __FILE__ ": vepl_median() not implemented for " << image << '\n';
00102
00103 return img_out;
00104 }
00105