Line 1: Line 1:
 
Set the beta IP for easy access.
 
Set the beta IP for easy access.
  
  beta=192.168.1.101
+
  BETA=192.168.1.101
  
 
==Step 1: Check range of the input signal==
 
==Step 1: Check range of the input signal==
  
 
Set gain with:
 
Set gain with:
  ssh root@beta "./set_gain.sh 1
+
  ssh root@$BETA "./set_gain.sh 1
  
 
Take an overexposed image and check the levels:
 
Take an overexposed image and check the levels:
  
  ssh root@beta "./cmv_snap3 -2 -b -r -e 100ms" > snap.raw12
+
  ssh root@$BETA "./cmv_snap3 -2 -b -r -e 100ms" > snap.raw12
 
  raw2dng snap.raw12 --totally-raw
 
  raw2dng snap.raw12 --totally-raw
 
  octave
 
  octave
Line 29: Line 29:
  
 
  for i in `seq 1 64`; do
 
  for i in `seq 1 64`; do
   ssh root@beta "./cmv_snap3 -2 -b -r -e 10ms" > dark-x1-10ms-$i.raw12  
+
   ssh root@$BETA "./cmv_snap3 -2 -b -r -e 10ms" > dark-x1-10ms-$i.raw12  
 
  done
 
  done
  
 
Compute a temporary dark frame for RCN calibration:
 
Compute a temporary dark frame for RCN calibration:
  raw2dng --swap-lines --calc-darkframe dark-x1-10ms-*.raw12
+
  raw2dng --no-blackcol --calc-darkframe dark-x1-10ms-*.raw12
  
 
Upload it to the beta:
 
Upload it to the beta:
 
  mv darkframe-x1.pgm darkframe-rcn.pgm
 
  mv darkframe-x1.pgm darkframe-rcn.pgm
  scp darkframe-rcn.pgm root@beta:/root/
+
  scp darkframe-rcn.pgm root@$BETA:/root/
  
 
Set the RCN values:
 
Set the RCN values:
  ssh root@beta "./rcn_darkframe.py darkframe-rcn.pgm  
+
  ssh root@$BETA "./rcn_darkframe.py darkframe-rcn.pgm"
  
 
Put this in startup script:
 
Put this in startup script:
Line 59: Line 59:
 
   for e in `seq 1 100`; do
 
   for e in `seq 1 100`; do
 
     for g in 1 2 3 4; do
 
     for g in 1 2 3 4; do
       ssh root@beta "./set_gain.sh $g"
+
       ssh root@$BETA "./set_gain.sh $g"
       ssh root@beta "./cmv_snap3 -2 -b -r -e ${e}ms" > dark-x${g}-${e}ms-$i.raw12
+
       ssh root@$BETA "./cmv_snap3 -2 -b -r -e ${e}ms" > dark-x${g}-${e}ms-$i.raw12
 
     done
 
     done
 
   done
 
   done
Line 92: Line 92:
 
Set gain x1.
 
Set gain x1.
  
  ssh root@beta "./set_gain.sh 1"
+
  ssh root@$BETA "./set_gain.sh 1"
  
 
Take a picture of the IT8 chart, correctly exposed.
 
Take a picture of the IT8 chart, correctly exposed.
Line 98: Line 98:
 
Edit the coordinates and the raw file name in [http://github.com/apertus-open-source-cinema/misc-tools-utilities/blob/master/color-calibration/calib_argyll.sh calib_argyll.sh].
 
Edit the coordinates and the raw file name in [http://github.com/apertus-open-source-cinema/misc-tools-utilities/blob/master/color-calibration/calib_argyll.sh calib_argyll.sh].
  
  ssh root@beta "./cmv_snap3 -2 -b -r -e 10ms" > it8chart.raw12
+
  ssh root@$BETA "./cmv_snap3 -2 -b -r -e 10ms" > it8chart.raw12
 
  ./calib_argyll.sh IT8
 
  ./calib_argyll.sh IT8
  

Revision as of 19:55, 6 July 2016

Set the beta IP for easy access.

BETA=192.168.1.101

1 Step 1: Check range of the input signal

Set gain with:

ssh root@$BETA "./set_gain.sh 1

Take an overexposed image and check the levels:

ssh root@$BETA "./cmv_snap3 -2 -b -r -e 100ms" > snap.raw12
raw2dng snap.raw12 --totally-raw
octave
   octave:1> a = read_raw('snap.DNG')
   octave:2> prctile(a(:), [0.1 1 50 99 99.9])

Lower numbers should be around 50...300 (certainly not zero). Higher numbers should be around 4000, but not 4095.

Repeat for gains 2, 3, 4.

Put this in startup script:

./set_gain 1

2 Step 2: RCN calibration

Take 64 dark frames at 10ms, gain x1.

for i in `seq 1 64`; do
  ssh root@$BETA "./cmv_snap3 -2 -b -r -e 10ms" > dark-x1-10ms-$i.raw12 
done

Compute a temporary dark frame for RCN calibration:

raw2dng --no-blackcol --calc-darkframe dark-x1-10ms-*.raw12

Upload it to the beta:

mv darkframe-x1.pgm darkframe-rcn.pgm
scp darkframe-rcn.pgm root@$BETA:/root/

Set the RCN values:

ssh root@$BETA "./rcn_darkframe.py darkframe-rcn.pgm"

Put this in startup script:

./rcn_darkframe.py darkframe-rcn.pgm 

2.1 Validation

Put the lens cap on the camera, and check the image on the HDMI.

Set the matrix gains to x10 or x20. The fixed components of the row and column noise should be gone. You will still see a lot of dynamic row noise though.

3 Step 3: Dark frame calibration

Take dark frames at various exposure times and gains.

for i in 1 2 3 4; do
  for e in `seq 1 100`; do
    for g in 1 2 3 4; do
      ssh root@$BETA "./set_gain.sh $g"
      ssh root@$BETA "./cmv_snap3 -2 -b -r -e ${e}ms" > dark-x${g}-${e}ms-$i.raw12
    done
  done
done

Compute dark frames for each gain:

raw2dng --swap-lines --calc-dcnuframe dark-x1-*.raw12
raw2dng --swap-lines --calc-dcnuframe dark-x2-*.raw12
raw2dng --swap-lines --calc-dcnuframe dark-x3-*.raw12
raw2dng --swap-lines --calc-dcnuframe dark-x4-*.raw12

Save the following files (N=1..4):

darkframe-xN.pgm
dcnuframe-xN.pgm

These files should be used in postprocessing. Place them in the directory where you capture raw12 files, so raw2dng will use them.

3.1 Validation

On the same dark frames, or - even better - on a new set of dark frames, run:

raw2dng --swap-lines --check-darkframe dark*.raw12 > dark-check.log

Upload the log.

4 Step 4: Color profiling

Set gain x1.

ssh root@$BETA "./set_gain.sh 1"

Take a picture of the IT8 chart, correctly exposed.

Edit the coordinates and the raw file name in calib_argyll.sh.

ssh root@$BETA "./cmv_snap3 -2 -b -r -e 10ms" > it8chart.raw12
./calib_argyll.sh IT8

Save the following files:

  • ICC profile (*.icc)
  • OCIO configuration (copy/paste from terminal) + LUT file (*.spi1d)

4.1 Validation

Render the IT8 chart in Blender, using the OCIO configuration.

Same with the ICC profile (Adobe? RawTherapee? What apps support ICC?)

(todo: detailed steps)

5 Step 5: HDMI dark frames

Record a 1-minute clip with lens cap on.

Average odd and even frames.

(todo: polish and upload the averaging script)

(todo: check if the HDMI dark frames can be computed from regular dark frames)

Results: darkframe-hdmi-A.ppm and darkframe-hdmi-B.ppm.

6 Step 6: HDMI filters for raw recovery

This calibration is for to the recorder, not for the camera. It's for recovering the original raw data from the HDMI, so it has nothing to do with sensor profiling and such.

Record some scene with high detail AND rich colors.

Take a raw12 snapshot in the middle of recording. The HDMI stream will pause for a few seconds.

Upload two frames from the paused clip, together with the raw12 file. This calibration will be hardcoded in hdmi4k.

7 TODO