[Insight-developers] denoising filter

Nicholas Tustison ntustison at gmail.com
Fri Dec 7 06:09:17 EST 2012


Thanks Suyash.

On Dec 6, 2012, at 11:23 PM, Suyash P. Awate <suyash at sci.utah.edu> wrote:

> 
> Hi folks,
> 
> I've discussed this with Kris this afternoon and this needs a small fix in the way weights are being handled for anisotropic voxel sizes and in dimensions higher than 2.
> 
> 
> Regards,
> Suyash
> 
> 
> On Thu, Dec 6, 2012 at 4:02 PM, Nicholas Tustison <ntustison at gmail.com> wrote:
> Hi Kris,
> 
> You're right.  If I change the image spacing to be isotropic, I get
> past the error which is great.  I'm assuming we'll just see what
> Suyash says.  Thanks for looking into this.
> 
> Nick
> 
> 
> On Dec 6, 2012, at 5:24 PM, Kris Zygmunt <krismz at sci.utah.edu> wrote:
> 
> > Ok, there are 2 problems going on.  The first is that the patch weights are not appropriately 3D sphere.  The second is that the resampling of the patch weights results in a max patch weight < 1 for non-integer resampling values.  But I think the resampling should really be reconsidered a bit more.  If the image spacing is 0.5,0.5,0.5 I'm not sure that resampling really needs to happen.  The point is really to make the patch weights capture the relative anisotropy.  Thus if the image spacing is 1,1,0.5 then maybe in that case it makes sense to resample the patch weights in the z direction to cover the same amount of physical space.  I'm including Suyash on this message to see what he thinks is the best way to handle this.
> >
> > I haven't looked at your code changes yet, as I first wanted to understand better what was happening.  I'll take a look there next.
> >
> > -Kris
> >
> > On Dec 6, 2012, at 12:24 PM, Nicholas Tustison wrote:
> >
> >> Thanks Kris and Brad for your responses.  Since it's easier to
> >> look at code, I thought I'd post the changes I had to make.
> >>
> >> http://review.source.kitware.com/#/c/8833/
> >>
> >> Kris, if I read the code correctly, it seems to me that the physical
> >> weighting image shouldn't be affected at all by anisotropic voxels
> >> in the input image.  Am I reading that right?  The size of the physical
> >> weighting image seems only affected by the patch radius with
> >> isotropic spacing equal to 1.  When I write that image to disk using
> >> my patch, I get an isotropic weighting distance function.  Otherwise
> >> I get a flat disk where the weighting in the z? direction seems to be
> >> close to 0.  Before we get to the issue that both Brad and I are
> >> having of the thrown exception, perhaps we can clarify this issue.
> >> Is that okay?
> >>
> >> Thanks again for your help with this, Kris,
> >>
> >> Nick
> >>
> >>
> >>
> >>
> >>
> >>
> >> On Dec 6, 2012, at 1:08 PM, Bradley Lowekamp <blowekamp at mail.nih.gov> wrote:
> >>
> >>> Nick,
> >>>
> >>> I just ran into this problem too this morning. I am glad you looked into the problem further than I did.
> >>>
> >>> I was wrapping it for SimpleITK. I was setting up the filter with the defaults matching:
> >>>
> >>> http://review.source.kitware.com/#/c/8803/1/Code/BasicFilters/json/PatchBasedDenoisingImageFilter.json
> >>>
> >>> And I was testing it with the following 3D image:
> >>>
> >>> http://itk.org/gitweb?p=SimpleITKData.git;a=blob;f=Input/RA-Short.nrrd;h=fca085049470a826324a4f2c93af2fd65fbaed52;hb=HEAD
> >>>
> >>> With the following meta information:
> >>> Size: [64, 64, 64]
> >>> Spacing: [0.755874, 0.755874, 0.755874]
> >>> Origin: [0.283453, 0.283453, 0.283453]
> >>> Direction:
> >>> 1 0 0
> >>> 0 1 0
> >>> 0 0 1
> >>>
> >>>
> >>> I get the same error with the defaults as you did, when I run the filter with the defaults
> >>>
> >>> And then if I change the patchRadius:
> >>>
> >>> python: sitk.PatchBasedDenoising( img, patchRadius=8 )
> >>> ---------------------------------------------------------------------------
> >>> RuntimeError                              Traceback (most recent call last)
> >>>
> >>> /home/blowekamp/src/SimpleITK/Testing/Data/Input/<ipython console> in <module>()
> >>>
> >>> /home/blowekamp/build/SimpleITK/SimpleITK-build/Wrapping/SimpleITK.pyc in PatchBasedDenoising(*args, **kwargs)
> >>> 5767         double fractionPixelsForSigmaUpdate=1.0) -> Image
> >>> 5768     """
> >>> -> 5769   return _SimpleITK.PatchBasedDenoising(*args, **kwargs)
> >>> 5770 class MaximumProjectionImageFilter(_object):
> >>> 5771     """
> >>>
> >>> RuntimeError: Exception thrown in SimpleITK PatchBasedDenoising: /home/blowekamp/build/SimpleITK/ITK-prefix/include/ITK-4.3/itkPatchBasedDenoisingImageFilter.hxx:641:
> >>> itk::ERROR: PatchBasedDenoisingImageFilter(0x3086ee0): Center pixel's weight (0.685381) must be equal to 1.0
> >>>
> >>> Thanks,
> >>> Brad
> >>>
> >>> On Dec 6, 2012, at 12:07 PM, Nicholas Tustison <ntustison at gmail.com> wrote:
> >>>
> >>>> Hi Kris,
> >>>>
> >>>> Today I finally got a chance to look at your denoising work (I'm ashamed
> >>>> that I was at Penn for with Suyash for some time but I never asked him
> >>>> about it).  Anyway, I have a couple questions and I was hoping you could
> >>>> help me try to run your denoising work on some of my MRI.   I took the test
> >>>> that you wrote and modified it only so that I could use it as a stand-alone
> >>>> program.  I also verified that my version worked with the test images.
> >>>> However, when I tried to use it on my image (stats below)
> >>>>
> >>>> Image information
> >>>> Size:          [256, 256, 20]
> >>>> Origin:        [-232.879, -135.656, 240.706]
> >>>> SpatialExtent: [498.047, 498.047, 190]
> >>>> Center:        [16.1448, 113.368, 335.706]
> >>>> Spacing:       [1.95312, 1.95312, 10]
> >>>> Index:         [0, 0, 0]
> >>>> Direction:
> >>>> 1 0 0
> >>>> 0 1 0
> >>>> 0 0 1
> >>>>
> >>>> using the following parameters
> >>>>
> >>>> patchRadius = 4
> >>>> noiseModel = gaussian
> >>>> fidelityWeight = 0.0
> >>>> numberOfIterations = 1
> >>>> sigmaMultiplicationFactor = 2
> >>>>
> >>>> it gave me the following error
> >>>>
> >>>> Line: 634
> >>>> Description: itk::ERROR: PatchBasedDenoisingImageFilter(0x7fbffb0f5e10): Center pixel's weight (0) must be equal to 1.0
> >>>>
> >>>> After investigating this section of the code, I noticed that the physicalWeightsImage
> >>>> (after writing it to an image file) consists of what looked like a weighted 2-D disc.
> >>>> Based on my reading of the comments, should this be more of a 3-D weighted sphere?
> >>>> If so, I made some changes in the code to actually get a weighted sphere thinking
> >>>> that might be solve the problem but I still got the same error.  However, if I increase
> >>>> the radius to 8, it seems to get past that error without issue.  Is there a general rule
> >>>> for determining a minimal radius for this filter?
> >>>>
> >>>> Thanks for your help,
> >>>> Nick
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> Powered by www.kitware.com
> >>>>
> >>>> Visit other Kitware open-source projects at
> >>>> http://www.kitware.com/opensource/opensource.html
> >>>>
> >>>> Kitware offers ITK Training Courses, for more information visit:
> >>>> http://kitware.com/products/protraining.php
> >>>>
> >>>> Please keep messages on-topic and check the ITK FAQ at:
> >>>> http://www.itk.org/Wiki/ITK_FAQ
> >>>>
> >>>> Follow this link to subscribe/unsubscribe:
> >>>> http://www.itk.org/mailman/listinfo/insight-developers
> >>>
> >>
> >
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-developers/attachments/20121207/d49b8a98/attachment.htm>


More information about the Insight-developers mailing list