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 <[email protected]> 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 <[email protected]> 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



_______________________________________________
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

Reply via email to