Beispiel #1
0
typename ImageFactory<T>::view_type* move_dc_to_center(const T &src)
{
  size_t bottom_pad = src.nrows() % 2;
  size_t right_pad = src.ncols() % 2;
  const typename ImageFactory<T>::view_type* new_src;
  if (bottom_pad || right_pad) {
    new_src = pad_image_default(src, 0, right_pad, bottom_pad, 0);
  } else {
    new_src = &src;
  }

  typename ImageFactory<T>::data_type* dest_data =
    new typename ImageFactory<T>::data_type(new_src->size(), new_src->offset_y(), 
					    new_src->offset_x());
  typename ImageFactory<T>::view_type* dest =
    new typename ImageFactory<T>::view_type(*dest_data, *new_src);
  image_copy_fill(*new_src, *dest);
  
  typename ImageFactory<T>::view_type srcquadrant(*new_src, new_src->offset_y(), new_src->offset_x(), new_src->center_y(), new_src->center_x());
  typename ImageFactory<T>::view_type destquadrant(*dest, new_src->center_y(), new_src->center_x(), new_src->center_y(), new_src->center_x());
  image_copy_fill(srcquadrant, destquadrant);

  srcquadrant = ImageFactory<T>::view_type(*new_src, new_src->center_y(), new_src->center_x(), new_src->center_y(), new_src->center_x());
  destquadrant = ImageFactory<T>::view_type(*dest, new_src->offset_y(), new_src->offset_x(), new_src->center_y(), new_src->center_x());
  image_copy_fill(srcquadrant, destquadrant);
 
  srcquadrant = ImageFactory<T>::view_type(*new_src, new_src->center_y(), new_src->offset_x(), new_src->center_y(), new_src->center_x());
  destquadrant = ImageFactory<T>::view_type(*dest, new_src->offset_y(), new_src->center_x(), new_src->center_y(), new_src->center_x());
  image_copy_fill(srcquadrant, destquadrant);

  srcquadrant = ImageFactory<T>::view_type(*new_src, new_src->offset_y(), new_src->center_x(), new_src->center_y(), new_src->center_x());
  destquadrant = ImageFactory<T>::view_type(*dest, new_src->center_y(), new_src->offset_x(), new_src->center_y(), new_src->center_x());
  image_copy_fill(srcquadrant, destquadrant);
  
  return dest;
}
Beispiel #2
0
  typename ImageFactory<T>::view_type* thin_zs(const T& in) {
    const unsigned char constants[2][2] = {{21, 84}, {69, 81}};

    typedef typename ImageFactory<T>::data_type data_type;
    typedef typename ImageFactory<T>::view_type view_type;
    data_type* thin_data = new data_type(in.size(), in.origin());
    view_type* thin_view = new view_type(*thin_data);
    image_copy_fill(in, *thin_view);
    if (in.nrows() == 1 || in.ncols() == 1) {
      return thin_view;
    }
    
    data_type* flag_data = 0;
    view_type* flag_view = 0;
    try {
      flag_data = new data_type(in.size(), in.origin());
      flag_view = new view_type(*flag_data);
      
      try {
	bool deleted = true;
	bool constant_i = false;
	while (deleted) {
	  thin_zs_flag(*thin_view, *flag_view, 
		       constants[constant_i][0], constants[constant_i][1]);
	  deleted = thin_zs_del_fbp(*thin_view, *flag_view);
	  constant_i = !constant_i;
	}
      } catch (std::exception e) {
	delete flag_view;
	delete flag_data;
	throw;
      }
    } catch (std::exception e) {
      delete thin_data;
      delete thin_view;
      throw;
    }

    delete flag_view;
    delete flag_data;
    return thin_view;
  }