It struck me that the current way of recording light levels within pictures is really inefficient. The light levels are recorded in a linear scale. At high light levels it isn’t possible to perceive any difference between slight changes in brightness. In 8 bits you won’t really see a difference between colour level 254 and 255. Let alone in 14 bits where the light level difference is about 1/16000. The last part of the light level figure is wasted at high light levels.
We use high bit count cameras partly because they allow low light to be amplified to bring things out of the shadows. At low levels the first part of the number is wasted (because it is zero) and you can see the difference between, say, a 4 and a 5 (particularly if that is brightened by a few stops to 128 and 160). This gives you banding on processed pictures.
We take pictures in a logarithmic way. We change the brightness in factors of 2 for every stop on a lens. The cameras manage ISO levels in a similar way. Light levels in pictures are processed in a logarithmic way. So why not record the light levels in the RAW format in the same way?
I suggest the first part of the light level is recorded as a standard number but to a lower number of bits. Then the last part of the light level records a 2 to the power multiplier. A normal 12 bit light level goes from 000000000000 to 111111111111 in binary. Using the new format an image recording 8 bits of light levels and 4 multiplier bits would give you in binary:
[8 Light level bits]:[4 Multiplier bits]
The highest number would be recorded as
11111111:1111 which would be 111111111000000000000000 That is a 24 bit number! The next number/light level down would be:
11111110:1111 which is 111111110000000000000000
In terms of brightness this is equivalent from going from 511 to 510.
The more observant may have noticed that 2^8 isn’t 512 that there are too many 1s in the numbers above. This has used a trick of deleting the first number if the multiplier is more than 0 and then adding it in again to get an extra bit of data. Binary numbers always start with a 1 and this avoids wasting the first bit. So:
00000001:0001 is 00000001 + 100000000 = 100000001
And the next lower number is
00000000:0001 which is 00000000 + 100000000 = 100000000
Followed by
11111111:0000 which is just 11111111
This method compresses the data so that only the part that you can perceive is kept. It would allow a picture to have a vast optical range. The example above has 8 bit data recorded across 2^4 = 16 stops on the same picture which gives 256* 2^4 = 4096 potential light levels. That is, of course, the same number as a 12 bit camera but all the light levels are useful. The accuracy of the brighter light levels is sacrificed in order to make the accuracy of the lower light levels much better. If you changed that to 14 bit data with a 10:4 light level: multiplier bits ratio I doubt anyone would notice the drop in high brightness quality but anyone processing the picture would notice the improvement in low light level quality.
Where this could be really useful is if iso levels on sensors can be set into zones or, even better, individual pixels. Cameras can’t do this yet. If they could* then the managing iso aspect of taking pictures would be hugely de-skilled. There would be no practical loss of data in the dark except at extremes. In the 8:4 example you get the same quality of data across 15 of the 16 stops. You could have a bright subject recorded at low iso (so low noise) while the darker background areas still record decent data (albeit with higher noise as they have higher iso settings).
At present, it could be a useful format for compressing landscape pictures that are made up from several pictures taken at different light levels. What would normally be blown highlights or areas which are too dark can still contain useful data.
Anyway, that was a bit of what-if thinking, what do you think?
Andy
*It would need 2 superimposed sensor arrays- one to set the iso of each pixel and the other to record the light level at that iso. The camera records both bits of information directly to make the picture.
We use high bit count cameras partly because they allow low light to be amplified to bring things out of the shadows. At low levels the first part of the number is wasted (because it is zero) and you can see the difference between, say, a 4 and a 5 (particularly if that is brightened by a few stops to 128 and 160). This gives you banding on processed pictures.
We take pictures in a logarithmic way. We change the brightness in factors of 2 for every stop on a lens. The cameras manage ISO levels in a similar way. Light levels in pictures are processed in a logarithmic way. So why not record the light levels in the RAW format in the same way?
I suggest the first part of the light level is recorded as a standard number but to a lower number of bits. Then the last part of the light level records a 2 to the power multiplier. A normal 12 bit light level goes from 000000000000 to 111111111111 in binary. Using the new format an image recording 8 bits of light levels and 4 multiplier bits would give you in binary:
[8 Light level bits]:[4 Multiplier bits]
The highest number would be recorded as
11111111:1111 which would be 111111111000000000000000 That is a 24 bit number! The next number/light level down would be:
11111110:1111 which is 111111110000000000000000
In terms of brightness this is equivalent from going from 511 to 510.
The more observant may have noticed that 2^8 isn’t 512 that there are too many 1s in the numbers above. This has used a trick of deleting the first number if the multiplier is more than 0 and then adding it in again to get an extra bit of data. Binary numbers always start with a 1 and this avoids wasting the first bit. So:
00000001:0001 is 00000001 + 100000000 = 100000001
And the next lower number is
00000000:0001 which is 00000000 + 100000000 = 100000000
Followed by
11111111:0000 which is just 11111111
This method compresses the data so that only the part that you can perceive is kept. It would allow a picture to have a vast optical range. The example above has 8 bit data recorded across 2^4 = 16 stops on the same picture which gives 256* 2^4 = 4096 potential light levels. That is, of course, the same number as a 12 bit camera but all the light levels are useful. The accuracy of the brighter light levels is sacrificed in order to make the accuracy of the lower light levels much better. If you changed that to 14 bit data with a 10:4 light level: multiplier bits ratio I doubt anyone would notice the drop in high brightness quality but anyone processing the picture would notice the improvement in low light level quality.
Where this could be really useful is if iso levels on sensors can be set into zones or, even better, individual pixels. Cameras can’t do this yet. If they could* then the managing iso aspect of taking pictures would be hugely de-skilled. There would be no practical loss of data in the dark except at extremes. In the 8:4 example you get the same quality of data across 15 of the 16 stops. You could have a bright subject recorded at low iso (so low noise) while the darker background areas still record decent data (albeit with higher noise as they have higher iso settings).
At present, it could be a useful format for compressing landscape pictures that are made up from several pictures taken at different light levels. What would normally be blown highlights or areas which are too dark can still contain useful data.
Anyway, that was a bit of what-if thinking, what do you think?
Andy
*It would need 2 superimposed sensor arrays- one to set the iso of each pixel and the other to record the light level at that iso. The camera records both bits of information directly to make the picture.
