#include <vbl/vbl_array_2d.h>
#include <vipl/vipl_with_vbl_array_2d/accessors/vipl_accessors_vbl_array_2d.h>
#include <vipl/vipl_sobel.h>
#include <vxl_config.h>
typedef vbl_array_2d<vxl_byte> img_type;
#include <vil/vil_image_view.h>
#include <vil/vil_load.h>
#include <vil/vil_save.h>
#include <vcl_iostream.h>
#include <vcl_cstring.h>
int
main(int argc, char** argv)
{
if (argc < 3) { vcl_cerr << "Syntax: example_sobel file_in file_out\n"; return 1; }
vil_image_view<vxl_byte> in = vil_load(argv[1]);
if (!in) { vcl_cerr << "Please use a ubyte image as input\n"; return 2; }
vil_image_view<vxl_byte> out(in.ni(),in.nj(),in.nplanes());
int xs = in.ni();
int ys = in.nj();
img_type src(xs, ys);
img_type dst(xs, ys);
vcl_memcpy(src.begin(), in.memory_chunk()->const_data(), in.size_bytes());
vipl_sobel<img_type,img_type,vxl_byte,vxl_byte> op;
op.put_in_data_ptr(&src);
op.put_out_data_ptr(&dst);
op.filter();
vcl_memcpy(out.memory_chunk()->data(), dst.begin(), out.size_bytes());
vil_save(out, argv[2], "pnm");
vcl_cout << "Written image of type PGM to " << argv[2] << vcl_endl;
return 0;
}