cgarcia Offline Upload & Sell: Off
|
p.1 #1 · Canon 1DX2/1DX and Nikon D5 ISO war (from RAWs) | |
Caution note: in the case of 1DX vs D4S the ISO levels nearly matched (DXO reported the ISOs 100/51200 as ISOs 80/39560 for the 1DX and 75/38592 for the D4S). But we still don't know which are the 1DX2 and D5 true ISO levels, or if they continue being comparable.
https://lightful.github.io/talk/photo/sensor/1DX2_D5__DR.png
So, the D5 gets about 0.5 EV extra of high ISO performance compared to 1DX2 (in fact about 0.25 EV better than 1DX, except at ISO 51200). And the 1DX2 at low ISO turns 1.5 to 1 EV better compared to D5 (in fact 0.25-0.5 EV better than it was the D4 if we mix with DXO data). Yes, Canon has tried to catch Nikon at the same time that Nikon tried to catch Canon resulting in that both exchange seats and continue uncaught!.
Perhaps what we should be comparing is the D4 vs 1DX2 and the D5 vs 1DX:
https://lightful.github.io/talk/photo/sensor/1DX_D5__DR.png
The forums were expecting from the D5 a huge jump at high ISO over Canon, but this is not the case. At ISO 51200, the old 1DX has a read noise of less than 81 DN (see https://www.fredmiranda.com/forum/topic/1421137) compared to almost 92 DN of Nikon D5 (see at the end of this post): both values yield equivalent dynamic range, once substracted the black level and accounted for the slight megapixels difference.
To calculate the DR, the brightest non burned pixel value is compared with the read noise at each ISO level. Unfortunately, dcraw doesn't finds masked pixels on D5 RAW files. So, any ordinary shot is not usable for the task. The read noise for these graphs has been calculated from specially taken "dark frames" (shoot at 1/8000, apparently with the body cap in place). On this way, what should be a perfect black picture, turns to be not so black, due to the noise (which we can then measure). Fortunately, the D5 doesn't clips values under 0: when there is no light, the ADC may get slightly positive and negative values due to noise, but recent Nikons add here an offset and later doesn't discards the values under it (if this were not the case, the read noise would be far more difficult to be accurately obtained).
Strangely, the read noise (standard deviation of the RAW data in the dark frame) is different in the D5 red, green and blue channels. I once readed that Nikon partially corrects for white balance in the RAW, and I suspect that maybe this is the case with the D5 (the red seems multiplied by about 1.26 and the blue by about 1.17). So, the real sensor performance is likely even better. I could have used the (more favourable) green standard deviation (G1 or G2 values) but we are measuring DR and, since this "cooking" of the RAW effectively decreases the dynamic range in the blue and red channels (by prematurely clipping their highlights) it is fair to take it into account. One can not understand why manufacturers still manipulate (damage) the RAW data instead of storing a metadata flag (e.g. "channel X must be multiplied by Y") which would allow to handle these adjustments during the RAW conversion in a non destructive way. Also is strange that, at huge ISO levels, one green channel seems consistently more noisy than the other.
So finally, the standard deviation used to measure the read noise is labeled as "R+G1+G2+B" (see the data at the end of this post) to represent the aggregation of the partial standard deviations of each channel, which is very similar to the value got if we totally ignore the bayer matrix (labeled as "RGGB"). I only had a dark frame for each ISO level, except for ISO 100, where several were available. So, it was possible to do an additional test at ISO 100: calculate the noise in the image resulting from substracting two dark frames, which accounts for variations in the pixel-to-pixel sensitivity, or for patterns caused by the electronics, removing false noise. In this second test, the read noise measured was 5.64662, nearly identical to the read noise in the frames before substraction (5.65481 and 5.64517).
Note: The ISO 800 read noise is a bit strange on D5, but the skew is consistent, and the camera settings seem correct. I'd take the D5 DR plot at ISO 800 with a grain of salt, because I did not have another additional file to double-check (as I had with the 1DX2 at ISO 400, where the singularity there was confirmed as true).
Warning: I have assumed a saturation level of 16382 (the maximum possible DN) because I had no overexposed shots to determine it. In case some ISO level doesn't reach this level, the D5 estimated DR would be slightly lower (maybe by 0.1 or 0.2 EV). Also for that reason the intermediate ISOs DR is not plot (their RAW saturation value will not be 16382 if are fake and were implemented by applying a negative exposure compensation).
Yes, the D5 intermediate ISOs are fake (digital gain) causing the read noise (as well as the dynamic range) to "jump" when the next ISO is native and the noise/DR suddenly improves. The only way to avoid this (unless the sensor were ISO invariant, not the case of D5) is to use analog gain. Canon never has used fake digital ISOs in a 1D body, only in inferior models (5D series included, with the exception of the 5DS). We hope that Nikon has a compelling technical reason for doing this in a flagship model:
https://lightful.github.io/talk/photo/sensor/D5_readnoise_a.png
These are likely the ISO mappings:
ISO 100 -> 125 (100+1/3EV) -> 160 (100+2/3EV)
ISO 200 -> 250 (200+1/3EV) -> 320 (100+2/3EV)
ISO 400 -> 500 (400+1/3EV)
ISO 800 -> 640 (800-1/3EV) -> 1000 (800+1/3EV)
ISO 1600 -> 1250 (1600-1/3EV) -> 2000 (1600+1/3EV)
ISO 3200 -> 2500 (3200-1/3EV) -> 4000 (3200+1/3EV)
...
Starting from ISO 800 it seems that Nikon uses the Canon way of faking ISO (some Canon users love ISO 160 because its cleaner shadows... in truth due to the forced 1/3 EV exposure to the right). Interestingly, the D5 has a rare DR drop at ISO 800, when such switching occurs (but not necessarily due to that). To easily determine what is occurring we would need frames with a bit of the image area overexposed, to detect if the max value in the histogram has decreased during the fake ISO exposure adjusting. Likewise, ISOs beyond 6400 likely aren't native:
https://lightful.github.io/talk/photo/sensor/D5_readnoise_b.png
Some curious facts from the histograms... The pixels values are from 0 to 16383, being 400 the "black" (with some random fluctuation around it due to read noise) and 16383 the overexposure level. There is a max DN of 16383 at ISO 40000, caused by a single blue pixel. By ISO 3276800 (remember: despite the body cap in place and shooting at 1/8000) about 0.4% of the image is overexposed (instead of black) and about 49.4% of the image pixels (no matter the color channel) are set to the opposite value (DN 0). With just half of the image 100% warranted as noise, maybe then Nikon judged that this was enough and decided not to continue upping the ISO. Perhaps the last usable ISO is 204800, because its black level (418.491) is still around where it suposedly should be (the EXIF always stores the exact value 400):
https://lightful.github.io/talk/photo/sensor/D5_noise_clip.png
Bellow is the data used for the graphs. The formula to calculate the DR is:
log2((16382 - DN mean) / read noise) + 0.661
With 0.661 = log2(sqrt(20.0/8)) being the adjust from 20MP into 8MP, and using "R+G1+G2+B" as read noise. The D5 read noise values can be compared to the ones of the 1DX2 posted in another thread (see https://www.fredmiranda.com/forum/topic/1421137) because both cameras have approximately the same parameters (same saturation values, similar black level, same pixel size).
PS: I still don't believe how these D5 RAWs could appear in my hard disk... who and when leaved them there?. I have only look at the noise (which I assume is legal, even if you are not the photo owner) and immediately have deleted them...
D5 ISO 50
stdev: R=6.36524, G1=5.06813, G2=5.03189, B=5.97156, RGGB=5.64039, R+G1+G2+B=5.63874
DN mean=400.819, DN min=368, DN max=435, DR(20MP)=11.4687, DR(8MP)=12.1297 clippedNoise=0%
D5 ISO 64
stdev: R=6.35862, G1=5.08126, G2=5.03109, B=5.96864, RGGB=5.65855, R+G1+G2+B=5.63888
DN mean=400.476, DN min=368, DN max=440, DR(20MP)=11.4687, DR(8MP)=12.1297 clippedNoise=0%
D5 ISO 80
stdev: R=6.36609, G1=5.04444, G2=5.04357, B=5.98107, RGGB=5.64205, R+G1+G2+B=5.6388
DN mean=400.669, DN min=366, DN max=437, DR(20MP)=11.4687, DR(8MP)=12.1297 clippedNoise=0%
D5 ISO 100
stdev: R=6.35951, G1=5.03679, G2=5.03171, B=5.94736, RGGB=5.67171, R+G1+G2+B=5.62365
DN mean=400.403, DN min=368, DN max=450, DR(20MP)=11.4726, DR(8MP)=12.1336 clippedNoise=0%
D5 ISO 125
stdev: R=7.98868, G1=6.34655, G2=6.34754, B=7.48438, RGGB=7.0783, R+G1+G2+B=7.07822
DN mean=400.744, DN min=361, DN max=458, DR(20MP)=11.1407, DR(8MP)=11.8017 clippedNoise=0%
D5 ISO 160
stdev: R=9.97347, G1=7.96967, G2=7.99731, B=9.3667, RGGB=8.87046, R+G1+G2+B=8.86958
DN mean=400.485, DN min=349, DN max=468, DR(20MP)=10.8153, DR(8MP)=11.4762 clippedNoise=0%
D5 ISO 200
stdev: R=6.5399, G1=5.36858, G2=5.3326, B=6.03176, RGGB=5.84462, R+G1+G2+B=5.83975
DN mean=400.782, DN min=367, DN max=493, DR(20MP)=11.4182, DR(8MP)=12.0791 clippedNoise=0%
D5 ISO 250
stdev: R=8.16488, G1=6.6316, G2=6.6266, B=7.57708, RGGB=7.28072, R+G1+G2+B=7.27955
DN mean=400.733, DN min=359, DN max=505, DR(20MP)=11.1002, DR(8MP)=11.7612 clippedNoise=0%
D5 ISO 320
stdev: R=10.2464, G1=8.28252, G2=8.28328, B=9.57051, RGGB=9.14396, R+G1+G2+B=9.13505
DN mean=400.719, DN min=350, DN max=549, DR(20MP)=10.7727, DR(8MP)=11.4336 clippedNoise=0%
D5 ISO 400
stdev: R=7.46961, G1=5.90713, G2=5.86575, B=6.91834, RGGB=6.60023, R+G1+G2+B=6.57571
DN mean=400.651, DN min=361, DN max=559, DR(20MP)=11.247, DR(8MP)=11.9079 clippedNoise=0%
D5 ISO 500
stdev: R=9.3454, G1=7.36765, G2=7.36419, B=8.70215, RGGB=8.2501, R+G1+G2+B=8.2398
DN mean=400.193, DN min=346, DN max=604, DR(20MP)=10.9215, DR(8MP)=11.5825 clippedNoise=0%
D5 ISO 640
stdev: R=8.01137, G1=6.35549, G2=6.35361, B=7.50301, RGGB=7.0997, R+G1+G2+B=7.09291
DN mean=400.527, DN min=358, DN max=687, DR(20MP)=11.1377, DR(8MP)=11.7987 clippedNoise=0%
D5 ISO 800
stdev: R=10.0591, G1=7.93947, G2=7.97341, B=9.39694, RGGB=8.89016, R+G1+G2+B=8.88957
DN mean=400.681, DN min=345, DN max=694, DR(20MP)=10.812, DR(8MP)=11.4729 clippedNoise=0%
D5 ISO 1000
stdev: R=12.2977, G1=9.80774, G2=9.79971, B=11.5083, RGGB=10.9515, R+G1+G2+B=10.9076
DN mean=400.9, DN min=336, DN max=791, DR(20MP)=10.5168, DR(8MP)=11.1778 clippedNoise=0%
D5 ISO 1250
stdev: R=8.37332, G1=6.61912, G2=6.61318, B=7.82728, RGGB=7.4128, R+G1+G2+B=7.39807
DN mean=400.819, DN min=354, DN max=958, DR(20MP)=11.0769, DR(8MP)=11.7379 clippedNoise=0%
D5 ISO 1600
stdev: R=10.4396, G1=8.31614, G2=8.30548, B=9.77402, RGGB=9.27179, R+G1+G2+B=9.2555
DN mean=400.504, DN min=343, DN max=1050, DR(20MP)=10.7538, DR(8MP)=11.4148 clippedNoise=0%
D5 ISO 2000
stdev: R=12.8406, G1=10.2222, G2=10.2064, B=11.981, RGGB=11.3805, R+G1+G2+B=11.3698
DN mean=400.162, DN min=322, DN max=1169, DR(20MP)=10.457, DR(8MP)=11.118 clippedNoise=0%
D5 ISO 2500
stdev: R=9.7205, G1=7.74474, G2=7.6924, B=9.0864, RGGB=8.60567, R+G1+G2+B=8.6053
DN mean=400.939, DN min=327, DN max=1597, DR(20MP)=10.8588, DR(8MP)=11.5198 clippedNoise=0%
D5 ISO 3200
stdev: R=12.2446, G1=9.68939, G2=9.64986, B=11.4253, RGGB=10.8346, R+G1+G2+B=10.8106
DN mean=400.537, DN min=312, DN max=1629, DR(20MP)=10.5297, DR(8MP)=11.1907 clippedNoise=0%
D5 ISO 4000
stdev: R=15.0775, G1=11.9887, G2=11.9277, B=14.0164, RGGB=13.3252, R+G1+G2+B=13.3209
DN mean=400.516, DN min=285, DN max=2067, DR(20MP)=10.2285, DR(8MP)=10.8895 clippedNoise=0%
D5 ISO 5000
stdev: R=13.1327, G1=10.3626, G2=10.2947, B=12.1643, RGGB=11.5554, R+G1+G2+B=11.5521
DN mean=400.946, DN min=272, DN max=2668, DR(20MP)=10.434, DR(8MP)=11.095 clippedNoise=0%
D5 ISO 6400
stdev: R=16.5034, G1=13.0338, G2=12.9327, B=15.2941, RGGB=14.524, R+G1+G2+B=14.5207
DN mean=400.842, DN min=231, DN max=3329, DR(20MP)=10.104, DR(8MP)=10.765 clippedNoise=0%
D5 ISO 8000
stdev: R=20.4746, G1=16.1918, G2=16.0471, B=18.9092, RGGB=18.0141, R+G1+G2+B=18.0031
DN mean=400.539, DN min=141, DN max=3435, DR(20MP)=9.79394, DR(8MP)=10.4549 clippedNoise=0%
D5 ISO 10000
stdev: R=20.9024, G1=16.5844, G2=16.3452, B=19.2282, RGGB=18.3809, R+G1+G2+B=18.3633
DN mean=401.118, DN min=131, DN max=4795, DR(20MP)=9.76531, DR(8MP)=10.4263 clippedNoise=0%
D5 ISO 12800
stdev: R=26.3622, G1=20.8879, G2=20.6016, B=24.2504, RGGB=23.1724, R+G1+G2+B=23.1504
DN mean=400.571, DN min=6, DN max=6136, DR(20MP)=9.43114, DR(8MP)=10.0921 clippedNoise=0%
D5 ISO 16000
stdev: R=32.9796, G1=26.1062, G2=25.7258, B=30.3436, RGGB=28.9549, R+G1+G2+B=28.9471
DN mean=400.914, DN min=4, DN max=7576, DR(20MP)=9.10873, DR(8MP)=9.7697 clippedNoise=0%
D5 ISO 20000
stdev: R=41.8175, G1=33.1518, G2=32.6393, B=38.367, RGGB=36.7031, R+G1+G2+B=36.6916
DN mean=400.543, DN min=0, DN max=8716, DR(20MP)=8.76673, DR(8MP)=9.4277 clippedNoise=0.000105682%
D5 ISO 25600
stdev: R=52.6647, G1=41.7058, G2=41.1119, B=48.3539, RGGB=46.2331, R+G1+G2+B=46.2094
DN mean=400.584, DN min=0, DN max=12061, DR(20MP)=8.43399, DR(8MP)=9.09496 clippedNoise=0.00129701%
D5 ISO 32000
stdev: R=65.8257, G1=52.1854, G2=51.3927, B=60.5148, RGGB=57.7926, R+G1+G2+B=57.7918
DN mean=401.7, DN min=0, DN max=15115, DR(20MP)=8.11121, DR(8MP)=8.77218 clippedNoise=0.00631691%
D5 ISO 40000
stdev: R=83.4153, G1=66.1556, G2=65.1758, B=76.4404, RGGB=73.3033, R+G1+G2+B=73.1876
DN mean=400.78, DN min=0, DN max=16383, DR(20MP)=7.77056, DR(8MP)=8.43153 clippedNoise=0.0234854%
D5 ISO 51200
stdev: R=104.806, G1=83.2891, G2=82.0185, B=95.8216, RGGB=91.9823, R+G1+G2+B=91.9649
DN mean=400.806, DN min=0, DN max=16383, DR(20MP)=7.44108, DR(8MP)=8.10204 clippedNoise=0.0652539%
D5 ISO 64000
stdev: R=131.201, G1=104.298, G2=102.583, B=119.635, RGGB=115.093, R+G1+G2+B=115.03
DN mean=398.362, DN min=0, DN max=16383, DR(20MP)=7.11844, DR(8MP)=7.77941 clippedNoise=0.157317%
D5 ISO 81275
stdev: R=164.757, G1=131.482, G2=129.205, B=150.067, RGGB=144.761, R+G1+G2+B=144.608
DN mean=401.17, DN min=0, DN max=16383, DR(20MP)=6.78805, DR(8MP)=7.44901 clippedNoise=0.427892%
D5 ISO 102400
stdev: R=204.578, G1=164.416, G2=161.397, B=186.534, RGGB=180.178, R+G1+G2+B=180.09
DN mean=402.389, DN min=0, DN max=16383, DR(20MP)=6.47137, DR(8MP)=7.13234 clippedNoise=1.32202%
D5 ISO 128000
stdev: R=244.094, G1=199.714, G2=196.468, B=224.711, RGGB=217.166, R+G1+G2+B=217.119
DN mean=398.596, DN min=0, DN max=2925, DR(20MP)=6.20195, DR(8MP)=6.86291 clippedNoise=3.61336%
D5 ISO 162550
stdev: R=297.697, G1=244.791, G2=240.429, B=272.256, RGGB=265.024, R+G1+G2+B=264.8
DN mean=411.955, DN min=0, DN max=3715, DR(20MP)=5.91432, DR(8MP)=6.57529 clippedNoise=7.04966%
D5 ISO 204800
stdev: R=355.339, G1=294.563, G2=290.855, B=325.84, RGGB=317.922, R+G1+G2+B=317.727
DN mean=418.491, DN min=0, DN max=4832, DR(20MP)=5.65085, DR(8MP)=6.31181 clippedNoise=12.3816%
D5 ISO 409600
stdev: R=611.885, G1=503.257, G2=498.067, B=555.565, RGGB=544.894, R+G1+G2+B=544.149
DN mean=520.159, DN min=0, DN max=8632, DR(20MP)=4.86541, DR(8MP)=5.52638 clippedNoise=27.8831%
D5 ISO 819200
stdev: R=1085.85, G1=891.777, G2=857.551, B=951.801, RGGB=952.748, R+G1+G2+B=950.745
DN mean=751.106, DN min=0, DN max=16383, DR(20MP)=4.0392, DR(8MP)=4.70016 clippedNoise=39.4155%
D5 ISO 1638400
stdev: R=2008.16, G1=1651.94, G2=1574.78, B=1766.51, RGGB=1761.35, R+G1+G2+B=1757.99
DN mean=1266.57, DN min=0, DN max=16383, DR(20MP)=3.10402, DR(8MP)=3.76499 clippedNoise=45.1751%
D5 ISO 3276800
stdev: R=3631.49, G1=3019.72, G2=2855.41, B=3409.65, RGGB=3251.47, R+G1+G2+B=3243.67
DN mean=2208.21, DN min=0, DN max=16383, DR(20MP)=2.12753, DR(8MP)=2.78849 clippedNoise=49.8048%
Edited on Apr 03, 2016 at 05:22 PM · View previous versions
|