comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Unexpected rebin behavior
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Unexpected rebin behavior [message #36271] Wed, 03 September 2003 09:20 Go to next message
mchinand is currently offline  mchinand
Messages: 66
Registered: September 1996
Member
Performing rebin on 2-d (or any higher dimension) integer arrays sometimes
give results I didn't expect. Here's a trivial example array:

IDL> help, b
B INT = Array[2, 2]

IDL> print, b
8 9
10 13

Minifying this to a 1x1 array with rebin gives:

IDL> print, rebin(b,1,1)
9

But,

IDL> print, fix(total(b)/4)
10

which is what I would have expected as the result from rebin. I think
what rebin is doing is first performing a rebin in one direction and then
performing it in the other direction on the new, intermediate rebinned
array. So the above is equivalent to:

IDL> print, rebin(rebin(b,1,2),1,1)
9

Switching the order of the rebinning yields a different result:

IDL> print, rebin(rebin(b,2,1),1,1)
10

Or equivalently:

IDL> print, rebin(transpose(b),1,1)
10


I was using rebin to reduce the size of an image and expected it to do
neighborhood averaging for the new array. The integer truncation after
rebinning along each direction can lead to different results than
averaging the neighborhood in a single step. I guess this isn't really a
bug (the manual only describes how rebin works in one dimension), but was
unexpected, at least for me. I simple work-around is to cast the array to
float and then back to integer (or just keep as float) after the rebin:

IDL> print, fix(rebin(float(b),1,1))
10


--Mike Chinander

--
Michael Chinander
m-chinander@uchicago.edu
Department of Radiology
University of Chicago
Re: Unexpected rebin behavior [message #36367 is a reply to message #36271] Wed, 03 September 2003 10:02 Go to previous message
mchinand is currently offline  mchinand
Messages: 66
Registered: September 1996
Member
In article <3F561762.B0B31F0B@saicmodis.com>,
James Kuyper <kuyper@saicmodis.com> wrote:
> Mike Chinander wrote:
>>
>> Performing rebin on 2-d (or any higher dimension) integer arrays sometimes
>> give results I didn't expect. Here's a trivial example array:
>>
>> IDL> help, b
>> B INT = Array[2, 2]
>>
>> IDL> print, b
>> 8 9
>> 10 13
>>
>> Minifying this to a 1x1 array with rebin gives:
>>
>> IDL> print, rebin(b,1,1)
>> 9
>>
>> But,
>>
>> IDL> print, fix(total(b)/4)
>> 10
>
> What it's doing is total(b/4), rather than total(b)/4. This has the
> advantage of handling large numbers without producing overflow. It has
> the disadvantage of underflowing for very small numbers, and producing
> wierd results when re-binning integer data.

Then why does rebin of the transpose give a different result?

IDL> print, rebin(transpose(b),1,1)
10

If it were just doing total(b/4), b and tranpose(b) should give the same
results.

--Mike Chinander

--
Michael Chinander
m-chinander@uchicago.edu
Department of Radiology
University of Chicago
Re: Unexpected rebin behavior [message #36368 is a reply to message #36271] Wed, 03 September 2003 09:31 Go to previous message
James Kuyper is currently offline  James Kuyper
Messages: 425
Registered: March 2000
Senior Member
Mike Chinander wrote:
>
> Performing rebin on 2-d (or any higher dimension) integer arrays sometimes
> give results I didn't expect. Here's a trivial example array:
>
> IDL> help, b
> B INT = Array[2, 2]
>
> IDL> print, b
> 8 9
> 10 13
>
> Minifying this to a 1x1 array with rebin gives:
>
> IDL> print, rebin(b,1,1)
> 9
>
> But,
>
> IDL> print, fix(total(b)/4)
> 10

What it's doing is total(b/4), rather than total(b)/4. This has the
advantage of handling large numbers without producing overflow. It has
the disadvantage of underflowing for very small numbers, and producing
wierd results when re-binning integer data.
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Re: Can a CALL_EXTERNAL .dll create a window?
Next Topic: Can a CALL_EXTERNAL .dll create a window?

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Fri Oct 10 05:14:30 PDT 2025

Total time taken to generate the page: 0.23896 seconds