2017年10月29日日曜日

カラーチェッカーを6x4ピクセルに縮小する方法

6x4のピクセルサイズにしたいことが多々あるのでphotoShopでの方法をメモする

下のように各パッチの中心付近を平均化した値を調べて6x4の24ピクセルにしたい

今回使った画像
 eos6Dでカラーチェッカークラシックを撮影し、colorCheckerPassportでdcpを作成し、
 RawTherapeeというフリーの現像アプリでWBの補正と、そのdcpの適用をしてsRGBで現像したもの

手順

  1. カラーチェッカーをトリミング (台形補正タイプ)
  2. カラーパッチが正方形になるように解像度を補正
  3. 余白を追加
  4. 27x17ピクセルに縮小 (バイリニアによる平均化)
  5. 6x4ピクセルに縮小 (ニアレストネイバーによるポイントサンプル)

1. カラーチェッカーをトリミング (台形補正タイプ)


余白は後で作るので両端の余白は含めずに角の4点をクリックする 

台形補正されたトリミング結果

2. カラーパッチが正方形になるように解像度を補正

カラーパッチ1個を囲ったとこの情報は横21.5に対して縦が20.7となっている

なので今回は横解像度をその分小さくする。
この場合は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]]]
"""

photoShopのポイントサンプルのテストしたときのメモ

ニアレストネイバーの縮小をテスト

4x4 to 2x2
  
 サンプルポイントが4ピクセルの中心だった時は右下が使われるみたい

6x6 to 2x2
  
 サンプルポイントがピクセルの中心の場合

25x17 to 6x4 (今回サンプルポイントする解像度)
  

カラーチェッカーの枠部分は下図のグレー部分に入っていればよい
 
 カラーパッチ3x3まではバイリニアで色の平均化をして、その中心の1ピクセルをポイントサンプルする

0 件のコメント:

コメントを投稿