スペクトル画像の数値化・一次元化と再画像化
フラウンホーファー線に限らずスペクトル画像を見たとき輝線・吸収線の波長を知りたくなります。画像位置と波長はだいたい線形と言っても完全に線形ではないので近似や補間が必要なわけで画像位置から波長を知るのはけっこう手間です。それに輝線・吸収線の中心(極大、極小)がどこにあるか画像をみるだけでわかることはまれです。
ということでまず画像を数値化する必要があります。
今はこれには
「国立天文台 - すばる画像解析ソフト -Makali`i- 配布サイト」
にある“マカリ”を使っています。
こんなのです。
スペクトル画像を読み込むと画像が表示されるので、数値データにしたいところを矩形で囲むとそこを一次元化/数値化してグラフ表示するとともに“テキストデータ”ボタンでCSVを得ることができます。
そう言えば以前マカリはFITS形式しか読み込めないと書いたような気がするのですが、勘違いでふだん使うような画像ファイルはたいてい読み込めるようです。
---------
じつはマカリの存在を知る前はいろいろ試行錯誤しました。
まず画像データを読み込む必要があるのですがプログラムの開発環境は“MPLAB X IDE”しかないわけでちょっとプログラムを書くというわけにもいきません。テキストデータだったら秀丸なりawkなり使えばどうにかできると思うのですが画像データだからバイナリです。
いろいろ調べたらWindowsにcertutil というコマンドがありこれでバイナリのファイルをエンコードしてテキストファイルにすることができます。テキストファイルになればあとはどうとでもなるわけでしばらくはこれを使って画像の数値化を行っていました。
--------
ところでほよほよさんが「「写真から撮影方向を分析する」アプリ」の新たな手法に基づくバージョンをリリースされています。
「写真から撮影方向を分析する-新たな試み6 リリース」
おまけで“JPGファイルから指定矩形領域の数値をCSV形式で取り出せ”るjpg2csvもリリースされていますので、せっかくですから使わせていただきました。
jpg2csv は画像の任意の矩形領域を数値化できますので、csvファイルをExcelで読み込んだあと一次元化します。マカリの一次元化というのは“カウント値は指定した範囲の分散軸に直行する方向の平均値となります”とあるので単に平均値をとればいいのでしょう。RGBそれぞれの平均をとってそれをグラフにしたものです(このとき画像位置から波長への変換も行います)
これを見るとE線の分離が難しいことの理由がよくわかるのですが、今回の話とは関係ないのでその話は省略します。
こちらはマカリの出力から作成したもの
とうぜんのことながら二つのグラフは完全に一致しています(重ねたものも作ったのですが、上の二つと同じなので省略します)
マカリの場合はRGB以外に輝度の出力があります。輝度をどうやって計算しているかも気になるのですが、これについてはマニュアルには記載がないようです。気にはなるのですが今のところ波長にしか興味がないので、何か調べてみようと気にはなりません。
-------------------
こうやって数値化したものは一次元化によってノイズが減っているはずです。となると今度は数値データを画像化すればきれいなスペクトル画像が得られると思われます。
実際「国立天文台岡山天体物理観測所 - ☆スペクトル物語☆~デジタルアトラス~」にあるスペクトル画像はそうやって再画像化したものだそうです。こちらは数値化にIRAF を使っているとありますが、IRAF にはそういう機能もあるのかもしれません。
再画像化となると今度はテキストデータをバイナリにする必要がありますが、これもcertutil にあります。手間なのは手間なわけですが。
上の画像の数値データを再画像化しGIMPで暗線をみやすくしたもの。
ノイズは減っているはずですから、ここに見える暗線はほんとうに暗線なんでしょう。とすると相当な数の暗線を検出できていることになります。
(スペクトル画像すべてを使って一次元化すればノイズはさらに削減できて暗線であることがより確かになるのですが、今回はExcelの操作が面倒くさくなりそうだったので使ったのは100ピクセル分だけです)
なお再画像化については
「スペクトルデータをExcelでSVG画像にしてみた」
にある方法の方が(最初はたいへんですが)かなり細かいこと__例えば波長が直線的に変化するようにする__ができます。
----------------------
簡易分光器の現在の構造ではスペクトル画像の分散軸は画像の辺とは平行になりません。分散軸が辺と平行になるように回転するのがけっこう手間です。
ひょっとしたらIRAFにはそういうことをやってくれる機能もあるのかもと思ったのですが、よく考えるとこれはなさそうに思えます。プロが撮影するスペクトル画像の分散軸が画像の辺と平行でないということはないでしょうから。
前の記事 「DVD簡易分光器のスリット間隔とフラウンホーファー線の見え方の関係」
次の記事 「DVD簡易分光器の色分解能を蛍光灯の輝線で実測してみた」
まとめ記事
「簡易分光器 - 作り方・使い方のまとめとリンク集」
簡易分光器とは?
簡易分光器の実力
太陽光(フラウンホーファー線)
蛍光灯
原理・設計
製作・材料
スリット
回折格子
構成/構造
フラウンホーファー線の撮影法
簡易分光器の性能評価
トラブルが起きたときの対処法
画像の数値化・グラフ化
デジカメの分光感度特性
スペクトルデータの再画像化
分光器の応用
光害カットフィルターの特性を調べる
半導体レーザー出力光の波長の変化
簡易分光器では手が出せないもの
スペクトルに関する資料集
スペクトル(画像)の実例
---------
「測定対象別記事一覧(測定、電子工作、天文計算)」
「過去記事の一覧(測定、電子工作、天文計算)」
« DVD簡易分光器のスリット間隔とフラウンホーファー線の見え方の関係 | トップページ | DVD簡易分光器の色分解能を蛍光灯の輝線で実測してみた »
「簡易分光器とスペクトル」カテゴリの記事
- 水を注いだコップの中のコインは真上に浮き上がって見えるのか?(2018.08.27)
- 水深2mのプールの見かけの水深は? 屈折と光線追跡(2018.08.23)
- CD-R簡易分光器の限界は? - 「イラストレイテッド光の実験」(2018.07.20)
- 簡易分光器の回折格子 - CDとDVDの違い(2016.07.28)
- 簡易分光器の特性をExcelでシミュレーションする(2016.07.26)
コメント
この記事へのコメントは終了しました。
« DVD簡易分光器のスリット間隔とフラウンホーファー線の見え方の関係 | トップページ | DVD簡易分光器の色分解能を蛍光灯の輝線で実測してみた »
早速 jpg2csv を使っていただきありがとうございます^^。
九州へ旅行に行かれてるときにすでにダウンロードできるようにはなっていました。
輝度ですが、今回新たなkeypointを作るにあたり、恒星の明るさを
0.299*R + 0.587*G + 0.114*B
で計算しています。
もしかしたら、この式の値とマカリの輝度が一致しているかも知れません。
これまた前から疑問に思っていましたが、画像の回転や csv2jpg も必要じゃないかということ。
DVDの弧に垂直にデータを取得するのは大変ですよね^^;
certutil というのは初めて知りました。
投稿: ほよほよ | 2016年6月17日 (金) 22時15分
こちらこそありがとうございます。
certutilはヘルプが1370行もあるという不思議なコマンドです。
回転は角度が一定ならImageJやImageMagickでバッチ処理ができるんじゃないかと思うのですが、実際には微妙に違うこともあるので目で見て回転角をチェックする必要がありGIMPでの手作業になっています。マカリが分散軸を自動で見つけてくれればいいのですが、記事にも書いたように天文台で撮ったスペクトル画像の分散軸が辺と平行でないということはないのでしょう。
数値データの画像化は画像位置と波長の関係を線形にするのもいっしょにできるようにSVGにしようと思っています。いつになるかわかりませんが (^^;;
0.299*R + 0.587*G + 0.114*B というのは画像処理アプリでRGB値を人間の感覚を加味してグレースケールにするときの輝度の計算式だと思います。マカリも“輝度”となっているのでこの式かと思ったのですが違うようです。
あらためて調べてみたらスペクトルの場合信号強度というのははその波長で検出した光子の数であって(つまり本質的ににグレースケールであって)RGB値はそれを画像表現するときの手段でしかないということのようです。マカリだとRGB値から算出した強度には物理的な意味はない、みたいなことも書いてありました。そもそもこういうソフトはCCD前提のはずで対数圧縮の変形みたいなデジカメのデータを処理させても極大・極小を探すくらいの意味しかないような気がしています。というかそのためにマカリを使っているわけですが。
一時白熱電球の光を黒体輻射と考えてEV値を変えて撮影したときのRGB値を分析すればRGB値を信号強度に変換する計算式が作れるのではないか思ったのですが、測りはじめたらとてもそんなことはできなさそうなわけのわからな分光感度特性になってました。
投稿: セッピーナ | 2016年6月18日 (土) 00時07分
記事本体もためになるものですが、コメ返のほうも情報が充実してますね^^。
輝度の式はハズレでしたか^^; グラフを見てなんか近い感じがしたのですけど。
3点でそれぞれRGB値と輝度値を取って、3次方程式で係数を求める・・・みたいなことは既に試されているのでしょうね^^;
数値データ画像化でSVGを使うというのは斬新ですね。思いもよりませんでした。楽しみです。(こっそり、CSV→BMPプログラムは作ってみることにします^^)
投稿: ほよほよ | 2016年6月18日 (土) 08時16分
これ記事に反映しておいた方がいいですね (^^;;
RGB値か輝度(光の強さ?)を求めるというのは何回か試したのですが、ある露出での結果がEV値を変えて撮影したものにはまったく適用できないことがわかったので挫折しました。単純な対数圧縮ならなんてことないんですが、そんなに甘くはないようです。デジカメの画像は手強いです。
CSV→BMPは今のExcel→秀丸→certutil→GIMPの四段階操作を一挙に済ませることができるので便利そうです。
ちなみにマカリの出力はこんな形式です。
"X座標","Y座標","輝度","R","G","B"
1.0, 200.5, 107.38578796, 14.69999981, 141.69999695, 93.09999847
2.0, 200.5, 108.12384796, 15.39999962, 142.39999390, 93.80000305
3.0, 200.5, 108.80893707, 15.19999981, 143.39999390, 94.30000305
でインターフェースは
csv2jpg CSVファイル名 [画像ファイル高さ]
とか。
なんか作ってくれと言ってるみたいな書き方ですが (^^;;
輝度の件は上の例で輝度の計算式を適用すると98.2, 98.9, 99.5となるのでぜんぜん違ってるというほどではないのですが何がちがうんでしょう。
投稿: セッピーナ | 2016年6月18日 (土) 08時38分
3次式×→3元連立1次式○
で、RGBの係数を求めてみたら、
0.591159 1.143429 -0.68022
になってしまいました^^;
負の係数が出てきてしまってダメっぽいですね。
[画像ファイル高さ]は考慮しようと思います^^。
そういえば MPLAB X IDE で開発するのも面白いかもしれませんね^^。
SDカード上にあるCSVファイルをBMPファイルにするくらいなら MPLAB でも・・・(笑)
投稿: ほよほよ | 2016年6月18日 (土) 09時52分
デジカメの画像のRGB値が何を意味しているか(なんでその値になるか)は研究のテーマとしてはなかなかおもしろいんじゃないでしょうか。
デジカメの撮影データの入ったSDカードをカードリーダーに入れると処理した結果がSDカードに追記されるとか (^^;;
投稿: セッピーナ | 2016年6月18日 (土) 10時30分
今回の新keypoint作成で、デジカメの当てのならなさを痛感しました。
人間の目に美しく見えるよう、レンズ性能を含めて、高度な補正プログラムが走ってるのではないでしょうか。←当たり前?
本題。csv2bmp は小一時間くらいでできるかと思ったのですが、意外や大変で時間かかってしまいました。
どれだけ大きなCSVファイルがくるかわからないのと、行数が3の倍数になっていない場合や高さ指定が入力ファイルとかち合った場合や、データ値不正などのエラー処理を考えるのが結構手間で・・・^^;
形式がきっちり決まっているBMPファイルを入力にするようなプログラムのほうがよっぽど簡単です^^。
完全にエラー処理ができているか不安ですが、とりあえずアップロード済みですのでお試しくださいm(_ _)m
投稿: ほよほよ | 2016年6月18日 (土) 23時49分
ちょっと手間取りましたがマカリのスペクトルデータを画像に変換することができました。
ありがとうございました m(._.)m
投稿: セッピーナ | 2016年6月19日 (日) 13時06分