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形式のメタデータを保持しているらしいので、設定された色温度があればそれを読み出すらしい。オートホワイトバランスの場合は計算すると。