Code Comments

Programming Forum and web based access to our favorite programming groups.
For Programmers: Free Programming Magazines | New: Database administration forum
Registration is free! Edit your profileCalendarFind other membersFrequently Asked QuestionsSearch -> 
Post New Thread











Thread
Author

Why level-shift on JPEG?
Why does the JPEG spec perform a level-shift of 128, thus changing the
range from [0,255] to [-128, 127]?  In some previous posts, someone
mentioned that it helps to achieve a greater precision when run
through the DCT.  Another post said that it was to prevent 'overflow'
when running the #'s through the DCT.  Are any of these ideas correct?
What is 'overflow' when running these #'s through DCT?

thanks,
Jackson

Report this thread to moderator Post Follow-up to this message
Old Post
Jackson
09-24-04 01:56 AM


Re: Why level-shift on JPEG?
jsmith193300@yahoo.com (Jackson) writes:

> Why does the JPEG spec perform a level-shift of 128, thus changing the
> range from [0,255] to [-128, 127]?  In some previous posts, someone
> mentioned that it helps to achieve a greater precision when run
> through the DCT.  Another post said that it was to prevent 'overflow'
> when running the #'s through the DCT.  Are any of these ideas correct?
>  What is 'overflow' when running these #'s through DCT?


Take 8 random numbers between 0 and 255.
Take 8 more.
Evaluate the dot product of these vectors.
Repeat several times, see what range of values the dot product takes.


Now repeat the experiment with numbers between -128 and 127.

Et voila, the answer magically appears.

Phil
--
They no longer do my traditional winks tournament lunch - liver and bacon.
It's just what you need during a winks tournament lunchtime to replace lost
... liver.   -- Anthony Horton, 2004/08/27 at the Cambridge 'Long Vac.'

Report this thread to moderator Post Follow-up to this message
Old Post
Phil Carmody
09-24-04 08:55 AM


Re: Why level-shift on JPEG?
Phil,

I ran the test, but the answer is not evident to me.  Assuming I did
this right (it's very possible I did not)  Here are the range values I
received:

[-16103, 24663]    [87733,188900]
[-38029,20313]     [60580,178870]
[-18894,4329]      [67935,174585]


Thanks,
Jackson

Report this thread to moderator Post Follow-up to this message
Old Post
Jackson
09-24-04 08:55 PM


Re: Why level-shift on JPEG?
jsmith193300@yahoo.com (Jackson) writes:

> Phil,
>
> I ran the test, but the answer is not evident to me.  Assuming I did
> this right (it's very possible I did not)  Here are the range values I
> received:
>
> [-16103, 24663]    [87733,188900]
> [-38029,20313]     [60580,178870]
> [-18894,4329]      [67935,174585]

^ narrow range of expected values
^ wide range of expected values

Which requires more precision to store, a narrow range of values,
or a wide range?

Phil
--
They no longer do my traditional winks tournament lunch - liver and bacon.
It's just what you need during a winks tournament lunchtime to replace lost
... liver.   -- Anthony Horton, 2004/08/27 at the Cambridge 'Long Vac.'

Report this thread to moderator Post Follow-up to this message
Old Post
Phil Carmody
09-25-04 01:57 PM


Re: Why level-shift on JPEG?
Phil:

I'm not an expert on this, nor am I a college student, nor do I have the
resources to experiment on this issue without investing many many hours of
my time.

I don't mean to be rude, but I'd really like a direct answer to this
question without having to spend a few ws figuring it out for myself.
If you know why level-shifted values are prefered over all-positive
values, could you please fill us in?  Thanks.


On 25 Sep 2004 13:28:03 +0300, Phil Carmody
<thefatphil_demunged@yahoo.co.uk> wrote:

> jsmith193300@yahoo.com (Jackson) writes:
> 
>
>    ^ narrow range of expected values
>                       ^ wide range of expected values
>
> Which requires more precision to store, a narrow range of values,
> or a wide range?
>
> Phil

Report this thread to moderator Post Follow-up to this message
Old Post
Korejwa
09-28-04 01:55 PM


Re: Why level-shift on JPEG?
Korejwa wrote:
>
> I don't mean to be rude, but I'd really like a direct answer to this
> question without having to spend a few ws figuring it out for myself.
> If you know why level-shifted values are prefered over all-positive
> values, could you please fill us in?  Thanks.

Here is another argument:
When you perform the DCT on the input samples, you end up with positive
_and_ negative AC coefficients in any way, *independent* from the level
of input samples!  It is only the DC range which is dependent on the
input level!
In fact, in prior versions of my extended DCT module (see
http://jpegclub.org/cjpeg/jfdctint.c) I decided to avoid the input
level-shift completely - this has *no* influence on the calculation
of AC coefficients when properly done!
However, the DC calculation may be critical under certain circumstances,
that's why I abandoned that approach eventually.
If the inputs are not level-shifted, then the DC will also be not
level-shifted, and thus not be *conform* with the AC coefficients.
However, with level-shifted inputs the DC will also be level-shifted
and thus will have the same range as AC coefficients.  This has
certain advantages especially in limited precision integer
implementations.

Regards
Guido

Report this thread to moderator Post Follow-up to this message
Old Post
Guido Vollbeding
09-28-04 01:55 PM


Re: Why level-shift on JPEG?
> In fact, in prior versions of my extended DCT module (see
> http://jpegclub.org/cjpeg/jfdctint.c) I decided to avoid the input
> level-shift completely - this has *no* influence on the calculation
> of AC coefficients when properly done!
> However, the DC calculation may be critical under certain circumstances,
> that's why I abandoned that approach eventually.

BTW, the standard 8x8 DCT (and also 16x16 in my module) would still
work perfectly well with non-level-shifted inputs under any
circumstances!  (Can level-shift only the DC *after* the calculation.)

However, for the new scaling features I have introduced special
*scaled* DCTs with fractional multipliers, and it is only due to
this feature that the moved level-shifting method doesn't work well
under *any* circumstances.  I remark 'any' because it still worked
under 'usual' circumstances (full 32-bit integer arithmetic).
Only when using reduced 16x16=>32 bit optimized integer multiply
in the code would this method fail in these cases.
Therefore, for more generality, I retained the original
level-shifting of input samples.

Regards
Guido

Report this thread to moderator Post Follow-up to this message
Old Post
Guido Vollbeding
09-28-04 08:55 PM


Re: Why level-shift on JPEG?
jsmith193300@yahoo.com (Jackson) wrote in
news:680af4.0409231610.75fdad0d@posting.google.com:

> Why does the JPEG spec perform a level-shift of 128, thus changing the
> range from [0,255] to [-128, 127]?  In some previous posts, someone
> mentioned that it helps to achieve a greater precision when run
> through the DCT.  Another post said that it was to prevent 'overflow'
> when running the #'s through the DCT.  Are any of these ideas correct?
>  What is 'overflow' when running these #'s through DCT?

The reason is that it reduces the possible ranges for the value of the DC
coefficient after running through the DCT.

Report this thread to moderator Post Follow-up to this message
Old Post
Flavius Vespasianus
10-30-04 08:55 AM


Re: Why level-shift on JPEG?
Flavius Vespasianus <nl@nl.com> wrote in message news:<twBgd.11205$KJ6.2391@newsread1.news.
pas.earthlink.net>...
> jsmith193300@yahoo.com (Jackson) wrote in
> news:680af4.0409231610.75fdad0d@posting.google.com:
> 
>
> The reason is that it reduces the possible ranges for the value of the DC
> coefficient after running through the DCT.

With my medium-level of understanding of programming, and low-level of
compression i will try to explain my thoughts.  For the
compress/decompress to decipher weather an interger is possitive or
negative the simply need one byte... a 0 for a possitive number and a
1 for a negative number (or vise-versa).   Now if the ranges we're [0,
255] the possiblility of an extra digit requires at least 2 extra
bytes.  While this one byte difference doesn't seem like much... well
it's compression and it makes the compression more efficient with
ABSOLUTELY no decrease in quality.

Anyway, that's my understanding of it, if i'm totally faulty in my
reasoning please let me know, compression (especially fractal)
interests me a lot

Report this thread to moderator Post Follow-up to this message
Old Post
Michael Spirko
11-11-04 08:55 PM


Sponsored Links




Last Thread Next Thread Next
Search this forum -> 
Post New Thread

Compression archive

Show a Printable Version Send to friend Email This Page to Someone! subscribe to this thread Receive updates to this thread
Computer Consultants
Programming Jobs
Visual Basic Controls
SQL Server Programming
Webservices
Java Security
Visual Studio
C# Programming
Visual J++
Software engineering
Open source Software
Perl Programming
PHP Programming
ASP Programming
ASP .NET Programming
Visual Basic Programming
Windows Scripting Host
Java Programming
Java Help
Java Beans
VBScript
Cobol
MAC Applications
Unix Programming
Forum Jump:
All times are GMT. The time now is 05:29 PM.

 
Free MCSE Braindumps | Real Estate Topics

Programming forum archive

Copyrights CodeComments.com 2004 - 2006

Powered by vBulletin Copyright 2000-2006 Jelsoft Enterprises Limited.