bug in radon transform?
Emmanuelle Gouillart
emmanuelle.gouillart at nsup.org
Mon Apr 9 12:41:58 EDT 2012
Yes, it looks weird. I don't have access to the corresponding toolbox in
Matlab either. I could "symmetrize" the result by the following change in
radon:
- shift0 = np.array([[1, 0, -w/2.],
- [0, 1, -h/2.],
+ shift0 = np.array([[1, 0, -w/2. + 0.5],
+ [0, 1, -h/2. + 0.5],
[0, 0, 1]])
- shift1 = np.array([[1, 0, w/2.],
- [0, 1, h/2.],
+ shift1 = np.array([[1, 0, w/2. - 0.5],
+ [0, 1, h/2. - 0.5],
[0, 0, 1]])
but then I'm not sure whether the behavior of iradon is correct either,
so I haven't committed this change yet. Pieter, if you're around, would
you mind having a quick look?
Also, iradon crashes for arrays with less than 64 lines (due to an int
that should be a float, resulting in a division by zero error -- I just
made a small pull request to correct that).
I also noticed that for the array used in
test_radon_transform.test_radon_iradon, applying radon and then iradon
does not give back the correct original array, but an array that looks
shifted by one line and one column. Try for example
>>> from skimage.transform import radon, iradon
>>> size = 70
>>> image = np.tri(size) + np.tri(size)[::-1]
>>> reconstructed = iradon(radon(image), filter="ramp",
>>> interpolation="linear")
>>> close('all')
>>> plt.matshow(image)
<matplotlib.image.AxesImage object at 0x42f9b90>
>>> plt.matshow(reconstructed)
<matplotlib.image.AxesImage object at 0x494a5d0>
I very much suspect that the center of rotation is not correct either in
radon, or in iradon, or maybe in both... I started having a look at the
code, but maybe it would be easier for Pieter than for me to fix it...
Cheers,
Emmanuelle
On Wed, Apr 04, 2012 at 03:53:38PM -0700, St�fan van der Walt wrote:
> On Wed, Apr 4, 2012 at 2:31 PM, Emmanuelle Gouillart
> <emmanuelle.gouillart at nsup.org> wrote:
> > � � � �I have the impression that the center of rotation used for
> > computing the radon transform (skimage.transform.radon) is not correct:
> In [8]: tf.radon(z, theta=[0, 90])
> Out[8]:
> array([[ 0., 0.],
> [ 0., 0.],
> [ 0., 1.],
> [ 0., 0.],
> [ 0., 0.],
> [ 0., 0.],
> [ 1., 0.],
> [ 0., 0.],
> [ 0., 0.],
> [ 0., 0.]])
> Hrm, you're right; that looks fishy. I wonder if this has to do with
> the padding that happens beforehand? I don't have access to
> MATLAB--does their "radon" give similar results?
> St�fan
More information about the scikit-image
mailing list