Surface Curvature from Range Images (or Depth Maps)

Brickle Macho bricklemacho at gmail.com
Tue Nov 19 22:01:54 EST 2013


Hi  St�fan and others,

As requested.

Depth maps provide data on non-flat surfaces.  Curvature is the amount 
by which a object/surface deviates from being flat.  Using differential 
geometry, we can find the compute the curvature of the surfaces in an 
image.  Due to the structure of a depth map (essentially a Monge Patch 
see: http://mathworld.wolfram.com/MongePatch.html), numerical 
computation of the surface curvature map only requires the first and 
second partial derivative estimates at each surface point and can be 
estimated using np.gradient() function.  Here is example output form the 
provided code:  http://i.imgur.com/kyMaR1F.jpg If interested, slightly 
more detail provided after my signature block.

I have no ego over this, so if not appropriate to skimage that is ok.  
Heck, someone else can take control and include this into skimage, but I 
suspect like me, everyone is busy with life and other side projects.

Michael.
--


What follows is a more detailed version of above.  Apologies if some of 
the following is obvious some.

In my current research, my focus is on depth maps or range images. 
Others in our research ground are using point clouds.   The benefit of 
depth maps is that they are basically a structured point cloud but allow 
me to use common 2D image processing algorithms on the depth maps, and 
not worry about a specific point cloud library or algorithms.   For 
example applying some simple morphological operations (from skimge) I 
have been segment objects at varying depths, i.e segment objects that 
standout.

A depth map is gray-scale image which encodes the distance for a certain 
view or perspective.  Depth maps record the first surface seen and 
(obviously) cannot display information about occluded surfaces, surfaces 
seen or refracted through transparent object or reflected in mirrors.  I 
also have an aligned with the color view of the same scene, but not 
directly relevant to this post.

Curvature is the amount by which a object/surface deviates from being 
flat.    Curvature can be used to describe a surface. Either using the 
curvature pixel value itself as the feature or calculating one of eight 
surface primitives are: peak, pit, ridge, valley, flat, minimal, saddle 
ridge, and saddle valley surfaces. In the code provided in the original 
post I just calculate the the curvature value of each pixel, resulting 
in a curvature feature map.  Technically the code provided can be 
applied to any grey-scale image, but really only makes sense when 
applied to range iamges.

Depth maps provide data on non-flat surfaces.  Differential geometry can 
be used to process and analyse data on non-flat surfaces.  Using 
differential geometry, we can find the compute the curvature of the 
surfaces in an image.    A depth or range value at a point (x, y ) is 
given by a single-valued function z(x,y), essentially a Monge Patch see: 
http://mathworld.wolfram.com/MongePatch.html.     Because of this the 
Gaussian and mean curvatures are only related to the first and second 
partial derivatives of the function z with respect to x and y.    Thus 
the numerical computation of the surface curvature map only requires the 
first and second partial derivative estimates at each surface point.   
These can be estimated using np.gradient() function.  Once we have these 
estimates, it is simply a mater of substituting into the equations from 
the various papers.

Here is the code applied to a range image from the Middlebury data set 
(http://vision.middlebury.edu/stereo/data/).  The linked image shows he 
original range image, mean and guassian curvature, and simplified mean 
and guassian curvature. The RGB imagery is included for completeness but 
is not used in the calculation. Curvature Example: 
http://i.imgur.com/kyMaR1F.jpg





On 19/11/2013 11:37 pm, St�fan van der Walt wrote:
> Dear Michael
>
> On Wed, Nov 13, 2013 at 3:19 PM, Brickle Macho <bricklemacho at gmail.com> wrote:
>> I have implemented mean and gaussian curvature methods in python and thought
>> they may be appropriate for inclusion to skimage.  An outline of the code is
>> provided below.  It assumes a surface defined as a function of two
>> coordinates, e.g. z = Z(x, y).  The curvature calculations are from the
>> following two papers
> Thank you for your post, and sorry for not responding earlier: I was
> hoping someone more knowledgeable would jump in.  Since I am not that
> person, would you mind explaining to me the gist of this work, and
> what it aims to do, perhaps with some example images?
>
> Thanks!
> St�fan
>




More information about the scikit-image mailing list