無改造 + フリーソフトで赤外線写真を撮る
撮影
無改造の7D2だと雲が無い晴れた12時順光時にf/4 iso3200で1secほど開けないといけない。無三脚で撮るのは不可能。
可視光とは屈折率が違う為7D2の位相差検出AFはうまくピントを合わせることが出来ない。さらにライブビュー時のコントラストAFは真昼の順光であっても使えない(白い建物は辛うじて使えたりする)。位相差検出AFで大まかに合わせて絞ったほうがよさそう。
以下の写真は位相差検出AFを使いピントと構図を勘で合わせて撮っています。
編集
スタック
ホットミラー無改造ではISOを上げてシャッター速度を稼ぐしかありません。ノイズが気になる場合はスタックしてノイズを取ります。詳細は以下を参照。
ホワイトバランス
葉でホワイトだランスを取ります。私はARTを使いましたがdarktableでもFilmulatorでもLightZoneでもPhotoFlowでもrawprocでもRawTherapeeでも vkdtでもいいです(たぶん)。
Labカラースワップ
葉が寒色、空が暖色になるように調整します。
具体的には明度以外のチャンネルを反転させます。
GIMP2を使用します。
色 > 色要素 > チャンネル分解 でLab色空間に変換します。
色 > 階調の反転 で a と b チャンネルを反転します。
反転出来たら 色 > 色要素 > チャンネル合成 でLab色空間をRGB色空間に変換します。
大量の画像を処理したいなら何かで書いたほうが良いと思います(pythonで書いてみた)。(各チャンネル8bit、24bit画像用)(ART(a fork of RawTherapee)で読むためにtiffにしています)
import cv2
import pathlib
import time
def main(img_path):
org_img = cv2.imread(img_path)
lab_img = cv2.cvtColor(org_img, cv2.COLOR_BGR2Lab)
L, A, B = cv2.split(lab_img)
A_not = cv2.bitwise_not(A)
B_not = cv2.bitwise_not(B)
out_img = cv2.cvtColor(cv2.merge((L, A_not, B_not)), cv2.COLOR_Lab2BGR)
return out_img
start_time = time.time()
output_dir = "\out_lab" #出力パス
input_dir = "\in" #処理したいフォルダのパス
input_list = list(pathlib.Path(input_dir).glob("*"))
for i in range(len(input_list)):
img_file_name = str(input_list[i])
img = main(img_file_name)
cv2.imwrite(output_dir + "\out_lab_" + str(i) + ".tiff", img)
print("------------------------------------------\n", img_file_name)
print("処理時間は{}sでした" .format(time.time() - start_time))
RGBカラースワップ
上と同じくGIMP2を使います。
色 > 色要素 > チャンネルミキサー を使い RチャンネルにBを、BチャンネルにRを入れます。場合によってはRチャンネルのRを残すといいらしいです。
大量の画像を処理したいなら何かで書いたほうが良いと思います(pythonで書いてみた)。(各チャンネル8bit、24bit画像用)(ART(a fork of RawTherapee)で読むためにtiffにしています)
import cv2
import pathlib
import time
def main(img_path):
org_img = cv2.imread(img_path)
B, G, R = cv2.split(org_img)
out_img = cv2.merge((R, G, B))
return out_img
start_time = time.time()
output_dir = "\out_rgb" #出力パス
input_dir = "\in" #処理したいフォルダのパス
input_list = list(pathlib.Path(input_dir).glob("*"))
for i in range(len(input_list)):
img_file_name = str(input_list[i])
img = main(img_file_name)
cv2.imwrite(output_dir + "\out_rgb_" + str(i) + ".tiff", img)
print("------------------------------------------\n", img_file_name)
print("処理時間は{}sでした" .format(time.time() - start_time))
フォールスカラー
フォールスカラー用の可視光画像を撮り忘れたのでそのうち書きます。
やることは赤外線画像を白黒にしてどれかのチャンネルに入れるという作業です。
撮った写真
ホットスポット情報
life pixel
https://www.lifepixel.com/lens-considerations/lens-hot-spot-testing-database
kolari vision
https://kolarivision.com/lens-hotspot-list/?srsltid=AfmBOoq1r0-BP7cSjDeJm67kSf7uo0jCGCjCYb-ZOm93r5KFnFeav8k2
RAWデータ配布
フィルターを買う前に未改造機によるRAWデータがあればいいのになぁと思っている人は多いはず。というわけで配布します。自由に使ってください。
(おまけ)暖かいものを食べると肌が白く写りやすい?
暖かいものを食べると肌が白く写りやすいという都市伝説がある。内容は「女性の肌を白く写すために赤外線フィルムが使われた。その際より肌を白く見せるため、モデルに温かいうどんや蕎麦を食べさせから撮影した。なぜならモデルの体温が上がれば皮膚から近赤外線がたくさん出てフィルムによく感光し肌がより白く写る」というもの。
上の図は一般的なCMOSセンサーの量子効率のグラフ。近赤外線では効率が2割になり1100nmに到達するまでに0になる。
ヒトの体温はだいたい37℃±1℃の範囲にあり、通常はほぼ一定に維持されている。一般に直腸内の温度(直腸温)は核心温度を反映するものとされ、外界の気温にかかわらず約37℃と一定である。
皮膚の温度(皮膚温)すなわち外層温度は、皮膚の部位および外界の気温によってまちまちであり、手足はとくに低く、頭部や額はもっとも高い。外界の温度が30℃以上の場合、皮膚温はどこで測定しても34~36℃となるが、外界気温が20℃程度になると、頭部の皮膚温は約32℃に保たれるのに対し、足では26~27℃にまで低下する。
37℃の黒体放射の波長ピークは約9500nm。皮膚温度はもっと下がるのでもっと長くなります。普通のセンサーでは写りません。うどんを食べて皮膚温が1,000Kくらいになると写り始めます。たぶん
感度のピークが700~900nmの赤外線フィルムでも9550nmの電磁波に感光することはないと思う。仮にほんの少し感光しても無改造のカメラのように高感度側に覆い隠されてしまう。それに普通のレンズのままあまりに広い周波数によく感光するフィルムを使うと波長に対し屈折量は反比例するから焦点が合う範囲が相対的に小さくなり全体的にボヤっとした写真になると思う。
おわりに
未改造機での赤外線写真は改造機に比べて葉に色が付きます。どうしても可視光線の割合が高くなりがちです。IR720で葉に色を付けたい人は逆に未改造のほうが良いかもしれません(いや素直にIR665あたりを買う方が良いか……)。
出典
Labカラーチャンネルの仕組み
https://hira-ibin.com/9274/#index_id4
Infrared photography
https://en.wikipedia.org/wiki/Infrared_photography
近赤外の撮像について
https://ads-img.co.jp/mv/technical-data/swir/
Manta G-040
https://www.alliedvision.com/jp/camera-selector/detail/manta/g-040/
Black-body radiation curve of human body at 37°C
https://www.researchgate.net/figure/Black-body-radiation-curve-of-human-body-at-37C_fig1_26273296
更新履歴
2024/12/24 公開(こんな日に何やってんだ……)
2024/12/25 "撮影"に加筆
2024/12/29 "撮った写真"のフィルター名を修正 "おわりに"を追加
2024/12/31 "ホットスポット情報"を追加