下のように各パッチの中心付近を平均化した値を調べて6x4の24ピクセルにしたい
今回使った画像
eos6Dでカラーチェッカークラシックを撮影し、colorCheckerPassportでdcpを作成し、
RawTherapeeというフリーの現像アプリでWBの補正と、そのdcpの適用をしてsRGBで現像したもの
手順
- カラーチェッカーをトリミング (台形補正タイプ)
- カラーパッチが正方形になるように解像度を補正
- 余白を追加
- 27x17ピクセルに縮小 (バイリニアによる平均化)
- 6x4ピクセルに縮小 (ニアレストネイバーによるポイントサンプル)
1. カラーチェッカーをトリミング (台形補正タイプ)
余白は後で作るので両端の余白は含めずに角の4点をクリックする
台形補正されたトリミング結果
2. カラーパッチが正方形になるように解像度を補正
この場合は1696x1073の画像に対して、横だけ 1696x20.7/21.5 ≒ 1633に変更(一応バイリニアで)
3. 余白を追加
横解像度の4%に相当するピクセル数を上下に増やす。
この場合だと横1633ピクセルなので4%の65ピクセルを上下に増やすためにカンバスサイズの変更を行う。
中心を基準として1633x1073から1698x1138に変更して余白を作成
4. 25x17ピクセルに縮小 (バイリニアによる平均化)
(8倍拡大表示)
これによって枠の黒色が1ピクセルのラインに収まり、各カラーパッチの大きさの3x3ピクセルには黒枠の影響はほぼ受けずに色が平均化できる
sRGBガンマ空間のままで平均化しているが、本当はリニアスペースの値で平均化したほうが良いはず。
でも気にするほどの誤差ではないと思う。
5. 6x4ピクセルに縮小 (ニアレストネイバーによるポイントサンプル)
3x3のカラーパッチのうち中心のピクセルだけが取得される
(32倍拡大表示)
完成
スクリプトで画像のRGBの値を表示する例
上の画像の値を読み込んで表示
import cv2 imgPath='eos6D_classic_sRGB.tif' img = cv2.imread(imgPath,-1) #exrでも読み込めるようにflagは-1 img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #openCVはBGRの順なのでRGBの順に変える print(img) """ [[[120 84 73] [200 148 134] [ 95 123 157] [ 95 109 68] [131 129 179] [100 190 175]] [[221 119 50] [ 67 88 169] [201 81 99] [ 91 57 99] [165 189 63] [232 158 41]] [[ 38 56 144] [ 78 150 81] [179 54 62] [241 197 35] [193 80 149] [ 0 141 175]] [[252 240 242] [205 202 204] [164 163 164] [120 120 120] [ 84 84 85] [ 52 51 51]]] """
0 件のコメント:
コメントを投稿