【画像処理100本ノック】Q.5. RGB⇔HSV変換

参考になったサイト

https://www.peko-step.com/tool/hsvrgb.html

RGB➡HSV 

def RGB2HSV(img):
  img = img.astype(np.float32)
  b = img[:, :, 0].copy() 
  g = img[:, :, 1].copy() 
  r = img[:, :, 2].copy() 
  H = img[:, :, 0].copy()
  V = H.copy()
  S = H.copy()
  tate = b.shape[1]#縦の画素数
  yoko = b.shape[0]#横の画素数

  for i in range(tate):
    for j in range(yoko):
      Max = max(b[i][j], g[i][j], r[i][j] )
      Min = min(b[i][j], g[i][j], r[i][j] )
  
      if Max == Min:
        H[i][j] = 0
      elif Max == b[i][j]:
        H[i][j] = 60 * (r[i][j] - g[i][j]) // (Max - Min) + 240
      elif Max == r[i][j]:
        H[i][j] = 60 * (g[i][j] - b[i][j]) // (Max - Min)
      elif Max == g[i][j]:
        H[i][j] = 60 * (b[i][j] - r[i][j]) // (Max - Min) + 120
      
      if H[i][j] <0:
        H[i][j] = H[i][j] + 360      

      V[i][j] = Max
      S[i][j] = round(255 * (Max - Min) / Max, 0)

  return [H, S, V]

HSV➡RGB

def HSV2RGB(H,S,V,img,add):
  img = img.astype(np.float32)
  tate = np.shape(V)[1]#縦の画素数
  yoko = np.shape(V)[0]#横の画素数

  H_add = H + add
  for k in range(tate):
    for l in range(yoko):
      if H_add[k][l] > 360:
        H_add[k][l] = H_add[k][l] - 360
  Max = V.copy()
  Min = V.copy()
  H_ = H_add / 60

  b = V.copy()
  g = V.copy()
  r = V.copy()

  for i in range(tate):
    for j in range(yoko):
      Min[i][j] = round(Max[i][j] - Max[i][j] * S[i][j] / 255 ,0)
      if 0 <= H_[i][j] < 1:
        r[i][j] = Max[i][j]
        g[i][j] = round(H_[i][j] * (Max[i][j] - Min[i][j]) + Min[i][j] ,0 )
        b[i][j] = Min[i][j]
      elif 1 <= H_[i][j] < 2:
        r[i][j] = round(((120-H_add[i][j]) / 60) * (Max[i][j] - Min[i][j]) + Min[i][j] ,0)
        g[i][j] = Max[i][j]
        b[i][j] = Min[i][j]
      elif 2 <= H_[i][j] < 3:
        r[i][j] = Min[i][j]
        g[i][j] = Max[i][j]
        b[i][j] = round(((-120+H_add[i][j]) / 60) * (Max[i][j] - Min[i][j]) + Min[i][j] ,0)
      elif 3 <= H_[i][j] < 4:
        r[i][j] = Min[i][j]
        g[i][j] = round(((240-H_add[i][j]) / 60) * (Max[i][j] - Min[i][j]) + Min[i][j] ,0)
        b[i][j] = Max[i][j]
      elif 4 <= H_[i][j] < 5:
        r[i][j] = round(((-240+H_add[i][j]) / 60) * (Max[i][j] - Min[i][j]) + Min[i][j] ,0)
        g[i][j] = Min[i][j]
        b[i][j] = Max[i][j]
      elif 5 <= H_[i][j] < 6:
        r[i][j] = Max[i][j]
        g[i][j] = Min[i][j]
        b[i][j] = round(((360-H_add[i][j]) / 60) * (Max[i][j] - Min[i][j]) + Min[i][j] ,0)

  img[:, :, 2] = b
  img[:, :, 1] = g
  img[:, :, 0] = r
  img = img.astype(np.uint8) 
  return plt.imshow(img)

画像処理100本ノックをやります

コロナで自宅待機が3週間経過しました。

はじめはお酒やらあつ森やらで楽しんでいたわけですが、さすがにちょっと飽きてきました。なので少しは身になりつつ興味のあることをやっていこうと思います。

その一つがこれです。

qiita.com

qiita.com

一昨日から始めて「1日5問やれば20日で終わる!」とか思ってましたが、全然進みません。昨日なんて大津の二値化で1晩が終わってしまいました。

でも単にプログラミング本を写経してるより「あーでもない。こーでもない。」と試行錯誤する過程や、うまくいったときの楽しさは比べ物にならないので続けられそうです。頑張ります。

 

colab.research.google.com

K&F ConceptのNDフィルターを検証

 

NDフィルターってまあまあ高いイメージがあったんですけど、3000円くらいでK&F Conceptが販売していたので買ってみた。撥水加工なので指紋がついても安心。

目的

気になる点は減光の度合いと色味です。安物のNDフィルターだとスペック通りに減光できていない場合や、色味がおかしいことがあるらしいので違いを確認します。

条件

 機材:SONY α7Ⅲ+SEL24105G ISO:100 WB:5500K

結果

明るさに関しては若干明るい気もしますが結構いい感じなのではないでしょうか。

問題は色味です。全体的に緑っぽくなりました。

(1)NDフィルターなし SS:1/30

f:id:barium0:20200411151352j:plain

(2)ND1000フィルターあり SS:30

f:id:barium0:20200411151440j:plain

ヒストグラム

ヒストグラムを見るとわかりやすいですね。NDフィルターありの場合ではヒストグラムが右にシフトしており、特に緑の輝度が強くなっています。

(1)NDフィルターなし SS:1/30

f:id:barium0:20200411152927p:plain

(2)ND1000フィルターあり SS:30

f:id:barium0:20200411152925p:plain

対策

 カラーパレットの緑成分における輝度を低下させても効果を得られなかったので、色被り補正と色温度をいじってみました。かなり元画像に近いように思います。

色温度:5500K➡6000K
色被り補正:+7➡+21

f:id:barium0:20200411155032j:plain

f:id:barium0:20200411155056p:plain

K&F Concept NDフィルターまとめ

  • ほぼ10段分減光できていた
  • 緑が強くなるので補正が必要

減光がきちんとできているようで安心しました。 色については毎回補正していく必要がありそうです。コロナが収束したら早速使っていきたいと思います。

しぶんぎ座流星群めがけて天城高原に行ってきた

f:id:barium0:20200105214928j:plain

年明け早々に撮って参りました。

今回向かったのは静岡でも有数の闇スポット、天城高原です。今回のしぶんぎ座流星群は翌日の日中がピークだったので1時ごろという遅めの到着でした。標高1000m近いこともあり-2℃という寒さ。西側は結構光害が強いですが、南天は首都圏の中でもかなり良いコンディションでした。夏は天の川を撮りに来てもいいかもしれないです。山道が40kmあるので結構疲れるのが難点ですね。

f:id:barium0:20200105220820j:plain

α7Ⅲ + TOKINA FiRIN 20mm F2 FE MF (F2 ISO 800 20sec)+ PRO1D プロソフトン[A](W)

今回の流星群はそこまで活発ではなく光も少なかったため、カメラに収めることはできませんでした。肉眼で見たのは1時間滞在して5,6個程度です。

TOKINA FiRINの初陣でしたが20mmもあるとなかなか広角でいいですね。天の川が楽しみです。

反省点

f:id:barium0:20200105221222p:plain

拡大してみると意外に流れていることがわかります。ISOをあげてSSを15secくらいにしたほうが良かったかも。

これから必要なレンズを考える

 f:id:barium0:20200101143646j:plain

自分は優柔不断なので、新しいレンズを知るたびに何を買うべきか迷ってしまいます。ですが毎回調べ直してしまうのも時間の浪費ですし、今日は自分に必要なレンズをまとめてみます。

 

 

現状の機材

CanonからSONYに転向した結果、現在の機材は以下のようになっています。レンズは3本しかありませんが、一応星からポートレートまで幅広く取ることが可能です。

カメラ:SONY α7Ⅲ 

レンズ:SONY FE 24-105mm F4 G OSS SEL24105G

    SONY FE 85mm F1.8 SEL85F18

    TOKINA FiRIN 20mm F2 FE MF

何を撮りたいか?

写真を始めたモチベーションが星景であることもあり、やっぱり風景が撮りたいわけです。となると現状のレンズに足りないのは超広角側かなと。さらに欲張るならポートレートに使える広角寄りの単焦点も欲しいところ。

 レンズの集める上で注意すべきこと

風景を取る上ではNDのようなフィルターが必要になることが多いです。しかしながら、nisiをはじめとしたフィルター群は値が張るので、石油王でもない限りポンポン買えません。したがって、効率よくレンズのシステムを作るためにはフィルターの互換性が重要なわけです。

今後買うであろうフィルターは?

円形か角型か

先述したように、フィルターの数は最小限に抑える必要があります。また、ハーフNDやハーフソフトなど使うためには角型を選ばざるを得ません。(HDRでもいい気はしますが...)そのため、角型フィルターを購入したいと思います。

何mm角にするか

割れるリスクを考慮すると、取り扱いやすいサイズの100mm角が望ましいと思われます。小さい方が安いですしね。

買うフィルターキット

 以上のことからNiSiのV6ホルダーが望ましいと判断しました。高い... 

 

レンズの候補は?

超広角かつ明るい単焦点レンズ

星の場合はこの画角まで来るとソフトフィルターくらいしか使わないでしょうから出目金とかは気にしなくていいと思います。

 SIGMA 単焦点超広角レンズ 14mm F1.8 DG HSM | Art A017

超明るい超広い超重いの三拍子が揃ったレンズ。

 SAMYANG 単焦点広角レンズ XP 14mm F2.4

こちらも星撮りで有名なレンズ。周辺まできちんと解像するようです。MC-11でマウントを変える必要がありますがSIGMAより軽く、半分以下のお値段。

 

超広角かつ明るいズームレンズ

 SONY FE 16-35mm F2.8 GM SEL1635GM

純正で広角のズームレンズといえばこれ。非球面レンズなので角型フィルターの互換性があります。しかも重量はそこまで重くなく、100mm角フィルターに対応しています。値段はバグっていますが、ベストな選択肢の一つであるのは間違いありません。

SIGMA 14-24mm F2.8 DG DN | Art A019

コマ収差が凄まじいレンズ。星を撮れる超広角ズームレンズとしては最強なのではないでしょうか。値段もめちゃくちゃ高いというわけでもないです。ただし、球面レンズかつ大口径なのでNiSiのホルダーは専用のものが必要ですし、150mm角になってしまいます。星専用にしてSEL1635Zの2本購入という手もありかも...?

 タムロン 17-28mm F/2.8 Di III RXDF(Model:A046)

値段はおとなしめですがもう少し広角であって欲しい気も。

 

ポートレート用の広角の単焦点レンズ

SONY FE 35mm F1.8 SEL35F18 

純正でコマ収差以外はバランスの良いレンズ。若干高い。

 タムロン 35mm F/2.8 Di III OSD M1:2 (Model:F053)

なんと3万円で買えてしまう衝撃のレンズ。SEL35F18より暗いですが肌が自然に撮れるようです。

 

結局どれにする? 

書いてて滲み出てたと思いますが、まずはこの3本を集めたいと思います。個人的には軽さや小ささを重視しています。CanonAPS-CからSONYのフルサイズへ切り替えてつくづく思うのですが、やはり軽さは正義です。