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