void imProcessRotate180(const imImage* src_image, imImage* dst_image)
{
  int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
  for (int i = 0; i < src_depth; i++)
  {
    switch(src_image->data_type)
    {
    case IM_BYTE:
      Rotate180(src_image->width, src_image->height, (imbyte*)src_image->data[i],  dst_image->width, dst_image->height, (imbyte*)dst_image->data[i]);
      break;
    case IM_USHORT:
      Rotate180(src_image->width, src_image->height, (imushort*)src_image->data[i],  dst_image->width, dst_image->height, (imushort*)dst_image->data[i]);
      break;
    case IM_INT:
      Rotate180(src_image->width, src_image->height, (int*)src_image->data[i],  dst_image->width, dst_image->height, (int*)dst_image->data[i]);
      break;
    case IM_FLOAT:
      Rotate180(src_image->width, src_image->height, (float*)src_image->data[i],  dst_image->width, dst_image->height, (float*)dst_image->data[i]);
      break;
    case IM_CFLOAT:
      Rotate180(src_image->width, src_image->height, (imcfloat*)src_image->data[i],  dst_image->width, dst_image->height, (imcfloat*)dst_image->data[i]);
      break;
    }
  }
}
Exemple #2
0
  void FeedBackward(const arma::Cube<eT>& error)
  {
    delta = arma::zeros<arma::Cube<eT> >(inputLayer.InputActivation().n_rows,
                                         inputLayer.InputActivation().n_cols,
                                         inputLayer.InputActivation().n_slices);

    for (size_t outputmap = 0; outputmap < inputLayer.OutputMaps(); outputmap++)
    {
      for (size_t inputmap = 0; inputmap < outputLayer.OutputMaps(); inputmap++)
      {
        arma::Cube<eT> errorSlices = error.slices(inputmap *
            inputLayer.LayerSlices(), (inputmap * inputLayer.LayerSlices()) +
            inputLayer.LayerSlices() - 1);

        arma::Mat<eT> rotatedFilter;
        Rotate180(weights.slice(
            outputmap * outputLayer.OutputMaps() + inputmap), rotatedFilter);

        arma::Cube<eT> output;
        BackwardConvolutionRule::Convolution(errorSlices, rotatedFilter, output);

        delta.slices((outputmap * inputLayer.LayerSlices()),
            (outputmap * inputLayer.LayerSlices()) +
            inputLayer.LayerSlices() - 1) += output;
      }
    }
  }
Exemple #3
0
void Backward(const arma::Cube<eT>& /* unused */,
              const arma::Cube<eT>& gy,
              arma::Cube<eT>& g)
{
    g = arma::zeros<arma::Cube<eT> >(inputParameter.n_rows,
                                     inputParameter.n_cols,
                                     inputParameter.n_slices);

    for (size_t outMap = 0, outMapIdx = 0; outMap < inMaps; outMap++)
    {
        for (size_t inMap = 0; inMap < outMaps; inMap++, outMapIdx++)
        {
            arma::Mat<eT> rotatedFilter;
            Rotate180(weights.slice(outMap * outMaps + inMap), rotatedFilter);

            arma::Mat<eT> output;
            BackwardConvolutionRule::Convolution(gy.slice(inMap), rotatedFilter,
                                                 output);

            g.slice(outMap) += output;
        }
    }
}
Exemple #4
0
bool RotationInstance::ExecuteOn( View& view )
{
   if ( !view.IsMainView() )
      return false;  // should never reach this point!

   AutoViewLock lock( view );

   ImageVariant image = view.Image();

   if ( image.IsComplexSample() )
      return false;

   double degrees = Round( Deg( p_angle ), 4 );
   if ( degrees == 0 )
   {
      Console().WriteLn( "<end><cbr>&lt;* Identity *&gt;" );
      return true;
   }

   ImageWindow window = view.Window();

   window.RemoveMaskReferences();
   window.RemoveMask();
   window.DeletePreviews();

   Console().EnableAbort();

   StandardStatus status;
   image.SetStatusCallback( &status );

   if ( p_optimizeFast )
      switch ( TruncI( degrees ) )
      {
      case 90:
         Rotate90CCW() >> image;
         return true;
      case -90:
         Rotate90CW() >> image;
         return true;
      case 180:
      case -180:
         Rotate180() >> image;
         return true;
      default:
         break;
      }

   AutoPointer<PixelInterpolation> interpolation( NewInterpolation(
         p_interpolation, 1, 1, 1, 1, true, p_clampingThreshold, p_smoothness, image ) );

   Rotation T( *interpolation, p_angle );

   /*
    * On 32-bit systems, make sure the resulting image requires less than 4 GB.
    */
   if ( sizeof( void* ) == sizeof( uint32 ) )
   {
      int width = image.Width(), height = image.Height();
      T.GetNewSizes( width, height );
      uint64 sz = uint64( width )*uint64( height )*image.NumberOfChannels()*image.BytesPerSample();
      if ( sz > uint64( uint32_max-256 ) )
         throw Error( "Rotation: Invalid operation: Target image dimensions would exceed four gigabytes" );
   }

   T.SetFillValues( p_fillColor );
   T >> image;

   return true;
}