CMOS/ADTG/Digic register investigation on ISO

Started by a1ex, January 10, 2014, 12:11:01 PM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

Audionut

Quote from: a1ex on February 28, 2014, 06:02:02 PM
WL: from your description, this is not white level (you have useful data above it).

Correct, it is the average ADU value.  This has not been black subtracted.

Quote from: a1ex on February 28, 2014, 06:02:02 PM
Gains: you linked the settings before finding the 0xFE register. Once you have changed this one from 4 to 3, the sweet spot for ADTG gains is now the one from here.

The gains for Canon Pulled ISO 100 were the ones that I linked.  The gains for Canon Pulled ISOs 200-12800 are the ones that you linked.

Because you said,

Quote- ISO 66 from 100: unchanged (see my previous posts).

Quote from: a1ex on February 28, 2014, 06:02:02 PM
Noise: you are probably trying to compute the upper limit of the SNR curve (best-case SNR). Signal is that thing you named WL (assumming you subtracted the black level), noise is stdev. SNR from some more signal levels would be more interesting (the highlights are already clean; most of the noise is in the shadows).

No.  I am reporting the standard deviation of the measured patch.  Simple.  If the data is not useful, well, it's better then leaving it out and finding out later, that it would have been useful.

In the images I linked, this is simple.  Same shutter, same claimed ISO rating, boost exposure +5 EV in post.  I can use my eyes to see this difference, I don't have to rely on my lack of maths skills.


Quote from: a1ex on February 28, 2014, 06:02:02 PM
Exposure difference: yes, overall brightness is higher by 0.1 stops. If you measure patches at 1 stop below clipping point, you will not see the nonlinear behavior. If you compare the exact clipping point, you will see it.

I specifically mentioned that any nonlinear behaviour probably wasn't captured.


Quote from: a1ex on February 28, 2014, 06:02:02 PM
You quoted Canon ISO in modified ISOs, which is irrelevant and makes it hard to choose what to compare with what. Moreover, since the equivalent ISOs above 800 are no longer full-stop ISOs, these lines can't be compared directly (you can either plot a graph showing the equivalent ISO vs measured SNR, or you can pull exactly one stop to get ISOs that can be compared directly).

Or I could report the Canon ISO that the data was obtained from.  Which is what I did, because at the time, it seemed like to most easiest way to describe the results.  Certainly, it left no room for error in the maths.

I enjoy helping out in anyway I can, you just need to remember that I am (maths) stupid.  I like to visualise.

a1ex

Canon ISO is simply the amplifier configuration you are starting from. You could as well start from ISO 6400 in Canon menu, override CMOS[0] and ADTG gains to the values from ISO 200, an apply some other tweaks until you get the same highlight detail as with ISO 100.

The end result is ISO 100 and you should compare it with Canon ISO 100.

If you don't do this, you end up saying you get e.g. 0.5 stops more DR at ISO 6400, which is simply not true.

SpcCb

Quote from: a1ex on February 28, 2014, 06:02:02 PM
(...)
@SpcCb: I'm lost. Where did you get these numbers from? Why ISO 800 has 64x more "energy" than 100? What kind of "energy" is this?

Oh my.. I should not used 'energy' to get a picture.
Well, clear your mind. :)

Let's see this path;

emax / emin represent the delta between the maximum and the minimum.

We have taken as example ISO 100/800, so the range:
100 - 200 - 400 - 800
Witch means a delta between each:
1 - 2 - 4 - 6
-> ISO 200 is 2x ISO 100, ISO 400 is 4x ISO 100, etc.
As we are in a power of 2 world, we have the scaling:
21 - 22 - 24 - 26
Then:
1 - 4 - 16 - 64
Hence:
e3 = 4e2 = 16e1 = 64e0

I can't imagine you can't figure that, this is simple boolean maths. ;)

Quote from: a1ex on February 28, 2014, 06:02:02 PMI use the engineering definition of DR: log2(full well capacity / noise RMS), which is log2(white - black) - log2(dark frame stdev), approximated to log2(white - black) - log2(optical black stdev). How does this "energy" fit here?

Note that you can keep the condensate figure:
DR = log2((white - black) / optical black standard deviation)
We do log2 one time, it's faster.

This is close to the equation what I used here to make calculation for a single frame:
DRsf = log2(( 15760 - 1024 ) / 6.47 )

In this equation, extend DR given by dual_iso appears nowhere.


EDIT: Maybe we should discuss of that in the dual_iso thread?

a1ex

Quote from: SpcCb on February 28, 2014, 06:59:16 PM
As we are in a power of 2 world, we have the scaling:
21 - 22 - 24 - 28
Then:
1 - 4 - 16 - 64
Hence:
e3 = 4e2 = 16e1 = 64e0

Why do we have this scaling?

and 28 is not quite 64 ;)

SpcCb

Quote from: a1ex on February 28, 2014, 07:03:43 PM
Why do we have this scaling?

and 28 is not quite 64 ;)

Indeed! This is an error; I said I do sometimes... :D
I made the correction.

a1ex

Okay. What's the reason you use these scalings?

Minor: where is that corrected 6 coming from?

SpcCb

Quote from: a1ex on February 28, 2014, 07:16:06 PM
Okay. What's the reason you use these scalings?

Minor: where is that corrected 6 coming from?

An imaging system with a spatially varying exposure (note that I replace energy by exposure, maybe a better word choice) pattern simultaneously measures local scene radiance I using different exposures. In our example, four exposures range are used such that the maximum exposure e3 measures low scene radiance with high fidelity, while the minimum exposure e0 can measure very high radiance values without saturation.
When information from e0 and e3 are used together, a non-linear quantization of scene radiance is obtained: 1 -> 6.
(my last error coming from here, I was thinking linear; sometimes it appends, I switch :) )

a1ex


SpcCb

Quote from: a1ex on February 28, 2014, 07:38:56 PM
Why 6 and why 64?
100 - 200 - 400 - 800,
1 - 2 - 4 - 6,
21 - 22 - 24 - 26
Then:
1 - 4 - 16 - 64
???

a1ex

Why not 2^7 or not 2^3.14 or any other number? And then, why 2^x?

Remember you are talking about ISO 100/800. Where is the 6 coming from?

Arguments like "we are in a power of 2 world" are not accepted.

If anyone else understands this theory, please enlighten me.

naturalsound

Quote from: Audionut on February 28, 2014, 05:19:11 PM
We can see the read noise is reduced in the Canon pulled ISO, however, the banding noise (probably from the sensor/CMOS amplifiers) has not been reduced.

However the results are great. Maybe your subject forces the viewers attention towards the banding because the wood on the left side has a structure that is very similar to the banding period. I had a look at the cardbord (former battery package) in 1:1 and could clearly read the whole text - In contrast to the Canon standard photo, where I could barely read the bigger letters.
I think for efficient banding reduction you have to subtract a darkframe. (The question is, how often one has to take a darkframe to compensate for possible changes of the banding)

a1ex

The banding is not really correlated from one shot to another (which means a dark frame subtraction will not help much).



- FPN at ISO 100 (from dark frame, averaged lines/columns)
- FPN at ISO 100 pulled from 200
- FPN cross-covariance between 2 dark frames at ISO 100
- FPN cross-covariance between 2 dark frames at ISO 100 pulled from 200
- FPN cross-covariance between 1 dark frame at ISO 100 (X) and 1 dark frame at ISO 100 pulled from 200 (Y)

So, the absolute amount of FPN is lower with the tweaks applied, but it doesn't decrease as much as the random noise => it becomes more noticeable.

The FPN has some autocorrelation at lags multiple of 16; this hint might help with correcting it in post.

SpcCb

Quote from: a1ex on February 28, 2014, 07:52:16 PM
Why not 2^7 or not 2^3.14 or any other number? And then, why 2^x?

Remember you are talking about ISO 100/800. Where is the 6 coming from?
(...)

So, if I understand you suppose that there's no spatial cumulative energy in the Bayer Matrix from each ISO (100 & 800) so a linear quantization of scene radiance?
And that emax / emin = 8 for dual_iso 100/800?

If it is, we should get in this case (always with same 5D2 with dual_iso 100/800 to compare):
DRdi = log2[(( 15760 - 1024 ) / √{( 8² + 6.47² ) / 2 }) 8 ]
DRdi = 13.984 stops

Looks a low gain, no? ???
Face to:
DRsf = 11.153 stops

Can you make the maths for your 5D3 and run a physical test to confirm it?
If it is, it will be an interesting theory. BTW maybe it is, we have to stay open (I'm always open for that! :) ).

a1ex

I've asked you to define the terms you are using. What is "spatial cumulative energy" and how does it apply here?

(tried searching and found 2 pdf's, a paper that assumes I know what that thing is, and a thesis about kinetic energy spectrum in the upper ocean)

SpcCb

Quote from: a1ex on March 01, 2014, 12:06:24 AM
I've asked you to define the terms you are using. What is "spatial cumulative energy" and how does it apply here?

(tried searching and found 2 pdf's, a paper that assumes I know what that thing is, and a thesis about kinetic energy spectrum in the upper ocean)

I mean that we have a SVE image composed by two frames 'interlaced' (I hope this word is correct) in the Bayer Matrix, like the matrix is half cut; in the RGGB pattern the first line RG will be @ISO 100 and the second GB @ISO 800.
So when the demosaicing algorithm will reconstruct the RGB image some of the second line values will be used by the first, first used by the second, etc.
In final, levels should be higher than taking lines discretely.

However, be careful; this is what I read in scientific papers (from Univs, Nikon & Canon) about SVE. I found this relevant but I don't find this myself.
Maybe with dual_iso it is quite different.


Edit: I tried to find papers on the web about this, without great success like you; only some bizarre PDF not in accord. Interesting papers I have was found with the search engine of an University.

Audionut

Quote from: a1ex on February 28, 2014, 06:47:45 PM
Canon ISO is simply the amplifier configuration you are starting from. You could as well start from ISO 6400 in Canon menu, override CMOS[0] and ADTG gains to the values from ISO 200, an apply some other tweaks until you get the same highlight detail as with ISO 100.

The end result is ISO 100 and you should compare it with Canon ISO 100.

Personally, I think most people would read it as having been reduced from the Canon ISO.  Stock standard, everyday ISO, set via Canon menu.

Quote from: Audionut on February 28, 2014, 05:19:11 PM
The ISO rating displayed is that in Canon menu, ie: the pulled ISO.

Rather then some convoluted gain configuration that reaches the same value.

However, your point still stands.

Quote from: a1ex on February 28, 2014, 06:47:45 PM
If you don't do this, you end up saying you get e.g. 0.5 stops more DR at ISO 6400, which is simply not true.

I believe they call this, an honest mistake.

Quote from: a1ex on February 28, 2014, 06:02:02 PM
SNR from some more signal levels would be more interesting (the highlights are already clean; most of the noise is in the shadows).

If I compare these 2 exposures.

ISO 200 - 1/60s - f/8.0 (lens unscrewed) - ADU 13519 - stdev 187.6
ISO 400 - 1/60s - f/8.0 (lens unscrewed) - ADU 7682 - stdev 92.7

We can see that the pure SNR is,

13519/187.6 = 72.063
7682/92.7 = 82.869

To me, this shows that we are not entirely shot noise limited.  The same exposure resulted in different noise levels.  Whether both exposures are considered clean or not is irrelevant.  Clearly, even at strong signal levels, there is a measurable difference.  And furthermore, since the 2 exposures were identical, the noise difference is entirely electronic induced.  ie:  Shot noise is not a contributor.

If we compare to the original example I described.

Quote from: Audionut on February 28, 2014, 05:19:11 PM
If I have my maths right, The noise difference between ML ISO 100 and Canon ISO 100 in the highlights.

log2(14169/13255) - log2(158.2/148.7) = 0.0068 EV

We can confirm that the exposures are very similar.  At least, if my maths is correct!

14169/148.7 = 95.286
13255/158.2 = 83.786

Even though the noise levels are different.

If I had a full blown lab setup where I could control light output precisely, to capture the nonlinear behaviour near saturation, then life would be all good.  In the real world, I'm trying to do the best I can, with what I have.  Both physical equipment and mental aptitude.

If my results are far removed from useful, then I am more then happy to stop clicking the shutter count higher and higher.




Quote from: a1ex on February 28, 2014, 09:29:00 PM
So, the absolute amount of FPN is lower with the tweaks applied, but it doesn't decrease as much as the random noise => it becomes more noticeable.


Indeed.  This is an important distinction.  The FPN is not being induced by these gain tweaks.  Simply, other sources of noise are being reduced sufficiently, to make this noise more apparent.

Using the 2 images on the previous page, we can conclude that the ADTG stage is a significant contributor to total noise.  CMOS amplification was increased, ADTG amplification was decreased, total apparent noise also decreased.  We can conclude that the noise is not (significantly) related to components further down the signal chain, because the signal level delivered to these components was very similar.

log2(14169/13255) = 0.096 EV

Here, the nonlinear behaviour in the highlights might effect the noise level in the highlights, but since the rest of the signal is linear, the signal difference between the point I measured, and the shadows, should also be linear.  In fact, if I compare a darker region of the 2 exposures.

log2(2722/2651) = 0.038 EV

This shows that as we move further towards the noise floor, the signal level between exposures becomes closer.  Further emphasising that the ADTG stage is a significant contributor to total noise.


If we compare the noise in the shadows from 2 identical exposures, 1 @ ISO 100 and 1 @ ISO 1600, we know from plenty of past examples that the apparent noise level reduces.

Now, if we compare the noise from 2 different exposures, ML ISO 100 - 1/15s and ML ISO 1600 - 1/250s, where we haven't used ISO to increase the rendered brightness, but instead, have used ISO to brightness match 2 different exposures, the result is this.

https://dl.dropboxusercontent.com/u/34113196/ML/ADTG/Compare/ML1600.jpg

https://dl.dropboxusercontent.com/u/34113196/ML/ADTG/Compare/ML.jpg

Here we can see 2 things. 

The apparent noise level increased.
The gain configuration for the ADTG was identical.  The signal level delivered to components further down the signal chain was very similar.

log2(14169/13702) = 0.048 EV

So we can conclude that the increased noise was from poisson statistics, and CMOS amplification.

We can also see that the FPN has not been (significantly) reduced.  The increased shot/CMOS noise has reduced the apparent effect of the FPN, but the FPN level is very similar.  I can attempt to use multiple exposures to average out the random noise, leaving the FPN component intact, however, if the FPN noise is not "really correlated from one shot to another", then the level of FPN will also be reduced.

Since the FPN is reduced in identical exposures with CMOS gain, where the signal through the ADTG stage is higher, and the level of FPN does not appear to differ (significantly), with reduced photons on sensor, or, directly with CMOS gain (ie: CMOS doesn't reduce the noise, it simply produces a knock on effect), it is my conclusion that the FPN noise is directly related to the ADTG stage.

This FPN noise may be a result of the scales of the individual ADTG gains.  Or it may simply be a fixed component of the ADTG stage at it's noise floor.
Since we reduced the total noise of the ADTG stage with register adjustments, the FPN component of the ADTG stage is now more apparent.

https://theory.uchicago.edu/~ejm/pix/20d/tests/noise/index.html#patternnoise
QuoteThis gives an indication of how visually disruptive pattern noise can be -- even though the fixed pattern noise is only about 20% of the overall noise, it is quite apparent because our perception is adapted to picking out patterns, finding edges, etc.

If the FPN component can be reduced with register adjustments also, it may be beneficial to sacrifice total noise reduction (my DR is better then your DR), in order to reduce the FPN component.  In other words, we reduce (the engineering definition of) DR, but we increase the visual aspect of the output images.

This is what I was trying to explain in the dual_iso thread.  Engineering DR has it's uses, but it is useless for describing what is happening between (white) and (stdev).

My first guess (for reducing FPN), would be increasing the gain of a single component in the ADTG stage, ie: 888x or 0xFE or 8/9/A/B, and observing the effects.  Then expanding on that by changing the gain of the individual registers in each ADTG gain stage.

Quote from: a1ex on January 10, 2014, 12:11:01 PM
Take it easy, the current state is research. As in, "If we knew what it was we were doing, it would not be called research, would it?"

;) :P

Audionut

Quote from: SpcCb on March 01, 2014, 12:20:57 AM
I mean that we have a SVE image composed by two frames 'interlaced' (I hope this word is correct) in the Bayer Matrix, like the matrix is half cut; in the RGGB pattern the first line RG will be @ISO 100 and the second GB @ISO 800.

The RGGB pattern is scanned intact with dual ISO.  That is to say, 1 ISO scans an entire RGGB pattern, and the other ISO scans an entire RGGB pattern.

So the interlaced fields are not a single pixel width, but dual pixel width to capture the entire RGGB pattern.  a1ex makes specific mention of this in his paper on dual_iso.  Page 5.

Quote from: naturalsound on February 28, 2014, 09:05:11 PM
I had a look at the cardbord (former battery package) in 1:1 and could clearly read the whole text - In contrast to the Canon standard photo, where I could barely read the bigger letters.

Yes, the reason why I choose low contrast text for the shadows.  :)

This area of the image averages -10 EV in the red channel, -9.5 EV in the green channels, and -11 EV in the blue channel, referenced to ISO 100 - 1/15s.

SpcCb

Quote from: Audionut on March 01, 2014, 02:07:31 AM
The RGGB pattern is scanned intact with dual ISO.  That is to say, 1 ISO scans an entire RGGB pattern, and the other ISO scans an entire RGGB pattern.

So the interlaced fields are not a single pixel width, but dual pixel width to capture the entire RGGB pattern.  a1ex makes specific mention of this in his paper on dual_iso.  Page 5.

(...)
Haa, OK. I thought it was interlaced every lines. Thank you Audionut to see that. ;)
So for the emax / emin gain, maths I used have to be adapted to this. As I said very first, I presumed that it will not be relevant here (I used 1/4px of the matrix).
Then maybe the emax / emin follow the ISOmax / ISOmin linearly with a minimum gap.

a1ex

QuoteIndeed.  This is an important distinction.  The FPN is not being induced by these gain tweaks.  Simply, other sources of noise are being reduced sufficiently, to make this noise more apparent.
Exactly.

And, since it's not correlated from picture to picture, stacking a few pictures (with averaging) will reduce it (because it is very close to a Gaussian random noise applied to each column), but a single dark frame will not reduce it (and might even increase it).

In LiveView, this FPN is corrected on the fly (you can see something like a moving average algorithm that recalibrates: toggle "ISO registers" on and off in movie mode, with LiveView visible behind ML menu, and you'll notice the effect in the first few seconds).

In photo mode, there is probably a similar auto-tuning. Might be worth trying some sensor cleaning routines?

(edit: tried, but didn't help; FPN stdev stays the same)

Quote
Personally, I think most people would read it as having been reduced from the Canon ISO.  Stock standard, everyday ISO, set via Canon menu.
We are not yet talking about the user interface of this thing (we may as well map ISO 66 -> ISO 50 in Canon menu, ISO 100 -> ISO 100 in Canon menu and so on, but we are not there yet). Right now, at this research stage, the ISO in Canon menu is simply a descriptor for the amplifier configuration (consider it on the same level as any other register value). That is, set Canon ISO to 200, set register X to A, set register Y to B, and the result is ISO 100.

To avoid confusion, I think you can say "ISO 100 pulled from 200". From this, I understand ISO 200 in Canon menu and gains configured in such a way that you recover 1 stop of highlight detail.

QuoteCan you make the maths for your 5D3 and run a physical test to confirm it?
Any processing log from cr2hdr is such an experiment: it measures noise levels and DR for the two input exposures from OB area, estimates te output DR based on ISO difference, and at the end it measures the noise level in OB area after all the processing. However, this has two problems:
- the output image also uses some small noise reduction (well, chroma smoothing) => that's why I call it "cooked"
- the noise pattern after processing is no longer a plain old uncorrelated Gaussian

To consider the DR loss caused by the half-resolution in shadows, it may be interesting to downsample the image by 2x2 before comparing the noise levels.

Audionut

Quote from: a1ex on March 01, 2014, 08:31:31 AM
Right now, at this research stage, the ISO in Canon menu is simply a descriptor for the amplifier configuration (consider it on the same level as any other register value). That is, set Canon ISO to 200, set register X to A, set register Y to B, and the result is ISO 100.

To avoid confusion, I think you can say "ISO 100 pulled from 200". From this, I understand ISO 200 in Canon menu and gains configured in such a way that you recover 1 stop of highlight detail.

Agreed. 
I have a tenancy to call the same thing by multiple names also, which obviously doesn't help.  ::)

The next time I have some free time, I will attempt to remove the variable component of the pattern noise (post process), and see if I can use the registers to remove the fixed component.


a1ex

On raw_diag's FPN display it may be worth printing the OB or dark frame stdev too (on the same screen).

So, besides maximizing DR, you may want to minimize the ratio between FPN stdev and overall noise stdev. This ratio would show effectively how much of our noise is FPN.

Audionut

For further analysis yes. 

Initially, I think it will be easiest to start at Canon settings, and concentrate on minimum FPN.

Once (if) I have a confirmed list of settings that minimise FPN, I'll leave it for you to correlate the data and draw the conclusions.  You're accuracy trumps mine!

SpcCb

Quote from: a1ex on March 01, 2014, 08:31:31 AM
(...)
To avoid confusion, I think you can say "ISO 100 pulled from 200". From this, I understand ISO 200 in Canon menu and gains configured in such a way that you recover 1 stop of highlight detail.
Any processing log from cr2hdr is such an experiment: it measures noise levels and DR for the two input exposures from OB area, estimates te output DR based on ISO difference, and at the end it measures the noise level in OB area after all the processing. However, this has two problems:
- the output image also uses some small noise reduction (well, chroma smoothing) => that's why I call it "cooked"
- the noise pattern after processing is no longer a plain old uncorrelated Gaussian

To consider the DR loss caused by the half-resolution in shadows, it may be interesting to downsample the image by 2x2 before comparing the noise levels.
I figured that chroma smoothing can be deactivated by cr2hdr command line? Maybe you are speaking about an other chroma smoothing in the process?
I agree for the 2x2 down-sampling, it should help to compare signal levels.

Audionut

These details are incorrect.  See correct analysis on the next page.

ADTG2[fe] - This affects RBG channels.  What Rawdigger calls Green 2.  This scales all channels equally, except for a smaller effect on one of the green channels.

ADTG4[fe] - This affects RGB channels.  This scales all channels equally, with a smaller effect on the other green channel.

ADTG2[8882]  - Blue channel - pixels 5,6,7
ADTG2[8884]  - Blue channel - pixels 1,2,3
ADTG2[8886]  - Blue channel - pixels 7,8,9
ADTG2[8888]  - Blue channel - pixels 3,4,5

This register predominately effects the blue channel and one of the green channels.

The pixel values listed, show the pixel count from OB on left side of image.  That is to say, ADTG2[8882]  - Blue channel - pixels 5,6,7, predominately effects the 6th pixel from OB, with a smaller effect on the 5th and 7th pixels.  This pattern repeats every 8th pixel.  So the same effect happens at the 14th, 15th and 16th pixels from OB.

Also, vertically, the strength varies every other pixel.

edit:  I am describing the effect in the RGB render.  Consider the raw composites on the next page.

Consider this image.


Each of the registers also seems to vary with strength.  Although I scaled all registers by the bolded digit 0x419.  So the varying apparent strength of the register, is probably related to the differences between the stock values.

The same pattern is repeated with registers ADTG2[8,9,A,B].  However, the gain reduction is less.

The same occurs at ADTG4[888?] and ADTG4[8,9,A,B].  However, these registers predominately effect the red channel, with a smaller effect on the green channels.

Also, the pixels effected, follow a slightly different pattern.

ADTG4[8880] - Red channel - 6, 7, 8
ADTG4[8884] - Red channel - 2, 3, 4
ADTG4[8886] - Red channel - 4, 5 ,6
ADTG4[8888] - Red channel - 1, 2




raw composites on next page.

g3gg0

wouldnt it be better visible in raw composite mode?
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!