オートホワイトバランス

PowerShot S100のRAWで撮影したファイルの色温度が、Adobe Photoshop Lightroom 4.1RC1で正常に表示されない問題。
LRでは3750K、Apple Apertureでは5049K、Corel AfterShot Proでは4762Kと、みんなバラバラ。どういうことなんだろうと思ってdcraw-8.96-1.1.el6のdcraw.cのコードを見たら理由が判明。

3667   if (use_auto_wb || (use_camera_wb && cam_mul[0] == -1)) {
3668     memset (dsum, 0, sizeof dsum);
3669     bottom = MIN (greybox[1]+greybox[3], height);
3670     right  = MIN (greybox[0]+greybox[2], width);
3671     for (row=greybox[1]; row < bottom; row += 8)
3672       for (col=greybox[0]; col < right; col += 8) {
3673         memset (sum, 0, sizeof sum);
3674         for (y=row; y < row+8 && y < bottom; y++)
3675           for (x=col; x < col+8 && x < right; x++)
3676             FORC4 {
3677               if (filters) {
3678                 c = FC(y,x);
3679                 val = BAYER(y,x);
3680               } else
3681                 val = image[y*width+x][c];
3682               if (val > maximum-25) goto skip_block;
3683               if ((val -= black) < 0) val = 0;
3684               sum[c] += val;
3685               sum[c+4]++;
3686               if (filters) break;
3687             }
3688         FORC(8) dsum[c] += sum[c];
3689 skip_block: ;
3690       }
3691     FORC4 if (dsum[c]) pre_mul[c] = dsum[c+4] / dsum[c];
3692   }

カメラがオートで色温度を検出するアルゴリズムが分からないと、同じ数字は出ないのかぁ。
TIFF形式のメタデータを保持しているらしいので、設定された色温度があればそれを読み出すらしい。オートホワイトバランスの場合は計算すると。

タイトルとURLをコピーしました