imedge/gradient operator updates

* Refactor imedge into imgradientxy, imgradient
* Fix 2D gradient calculation
* Added additional gradient operators from Ando Shigeru
  (Consistent Gradient Operators, PAMI Vol 22 No 3, March 2000)
* Set shigeru3 as default gradient method for imgradient, imgradientxy
* Add versions of sqrt, tan2 which return Images with Image input
* Changed Sobel, Prewitt operators to give gradient instead
  of negative gradient;  Also changed the order of arguments
  to return horizontal filter, vertical filter (Might
  need to be reverted)
* Added separable approximations of shigeru4 and shigeru5 filters
* Generalized imgradient functions to >2D
Gradient updates

* added magnitude, phase functions
* removed extra temporary creation from phase calculation
* added hypot function for Images (faster than sqrt(x.^2+y.^2))
* added checkerboard, diagonal gradient tests
Minor gradient updates

* Revert order change for filters
* Minor update to tests
Updated gradient function documentation
imedge/gradient operator updates

* Refactor imedge into imgradientxy, imgradient
* Fix 2D gradient calculation
* Added additional gradient operators from Ando Shigeru
  (Consistent Gradient Operators, PAMI Vol 22 No 3, March 2000)
* Set shigeru3 as default gradient method for imgradient, imgradientxy
* Add versions of sqrt, tan2 which return Images with Image input
* Changed Sobel, Prewitt operators to give gradient instead
  of negative gradient;  Also changed the order of arguments
  to return horizontal filter, vertical filter (Might
  need to be reverted)
* Added separable approximations of shigeru4 and shigeru5 filters
* Generalized imgradient functions to >2D
Gradient updates

* added magnitude, phase functions
* removed extra temporary creation from phase calculation
* added hypot function for Images (faster than sqrt(x.^2+y.^2))
* added checkerboard, diagonal gradient tests
Minor gradient updates

* Revert order change for filters
* Minor update to tests
Updated gradient function documentation
Gradient function fixes

* Add orientation function for returning the strongest edge orientation
* Make imedge return edge orientation instead of gradient direction
* Update docs, tests
Merge branch 'gradients' of github.com:kmsquire/Images.jl into gradients
Document orientation and phase angle ranges as [-pi,pi]
Gradient function updates

* changed shigeru* -> ando*, so we use the surname of Ando Shigeru
  instead of his given name
* Renamed: imgradientxy -> imgradients
           imgradient   -> magnitude_phase
* Changed EPS calculation when looking for flat regions (previous version
  was wrong, and the fix was too strict.  Now it might be too lenient...)
Merge pull request #134 from kmsquire/gradients

RFC: imedge/gradient operator updates
Fix missing rename
Merge pull request #136 from kmsquire/imgradient_rename

Fix missing imgradient rename
Add copy(img, data::AbstractImageDirect) (Fixes #139)
Fix #139
Merge pull request #140 from timholy/fix_double_Image

Add copy(img, data::AbstractImageDirect) (Fixes #139)
Added non-maximal suppression edge thinning function

* new functions: thin_edge, thin_edge_subpix, which currently
  call thin_edge_nonmaxsup, thin_edge_nonmaxsup_subpix.  Calling
  the latter functions directly has a few more options.  The
  generic thin_edge functions could be extended with other edge thinning
  algorithms in the future.
* Base on, but substantially modified from Peter Kovesi's nonmaxsup
  function for matlab
* thin_edge_nonmaxsup takes edge and gradient images as input,
  and tests whether each non-zero edge location is a local
  maximum by looking up and down the gradient at that location.
  The output image contains the values at all local maxima, and
  zeros elsewhere.
* For each local maximum, thin_edge_nonmaxsup_subpix fits a
  quadratic to the local geometry along the gradient, and returns
  an image containing the subpixel location of the actual maximum
  as an image of Base.Graphics.Point objects.  For Points, pt.x and
  pt.y always refer to x and y axes, respectively, regardless of
  image orientation.
* thin_edge_maxnonsup_subpix also modifies the first output image to
  return the estimated maximal value at the subpixel, if that value
  fits into the type of the output image.
* Modified the original algorithm so that it checks the minimal adjacent
  pixel value in the direction of the gradient; if this pixel value
  is greater than the value at (x,y), (x,y) is not a local maximum
* Changed angle discretization from (0,pi) to (0,2pi).  By testing
  in the direction of the actual gradient first, we reduce the number
  of interpolations in the other direction by ~1/4 in an average image
* Defines `zero` for Base.Graphics.Point if necessary
* Defines tests for vertical, horizontal, and diagonal edges
* Basic docs for all 4 thin_edges* functions
Edge thinning updates

* Discretize image gradients on the fly, to avoid temporary allocation
  of a discretized gradient image, per Tim Holy's suggestion
* Add versions of thin_edges_nonmaxsup!, thin_edges_nonmaxsup_subpix!
  which allow results to be placed in preallocated arrays