あぷらなーと


あぷらなーとの写真ブログ
by あぷらなーと
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
あぷらなーと
「自然写真大好き」
HNあぷらなーと が

いろんな写真ネタを
のんびり語ります。

気合い入れすぎると
続かないので、
「ぼちぼち」いきます。

生息地:香川・徳島
カテゴリ
最新のコメント
大事にならず良かったです..
by G at 16:36
> にゃあさん え..
by supernova1987a at 09:14
> オヤジさん 光..
by supernova1987a at 09:09
これがスプリッターの実力..
by にゃあ at 01:30
凄いですね! 撮影時間..
by オヤジ at 00:11
> けむけむさん ..
by supernova1987a at 22:04
星雲撮影おめでとうござい..
by けむけむ at 17:47
> Gさん 「su..
by supernova1987a at 14:11
> にゃあさん 不..
by supernova1987a at 14:05
> オヤジさん ほ..
by supernova1987a at 14:00
以前の記事
お気に入りブログ

タグ:ASI1600MC-COOL ( 52 ) タグの人気記事

ASI1600MC-COOLの謎③

★最新のDelphiでは

以前使っていたDelphiから10年以上が経過していますので当然進化しているのですが、細かいことでちょっと感動したのが、エディタのブロック強調表示機能。
昔、印刷したソースコードを読む時に、どこからどこまでが1ブロックなのかを見やすくするため、よく手書きで線を入れていましたが、最近のエディタは賢いのですね。なんと、勝手にブロックを認識して線を引いてくれるとは!
f0346040_04420549.jpg
近年プログラミングから完全に遠ざかっていたので、びっくり。これだけでもバグが減りますね。「Delphiリハビリ」中の身としてはありがたい♪



★読み取り段階で致命的ミス

前回、まさかのBigEndianで記録されていることが発覚したASI1600MC-COOLのFITSデータですが、よく見ると輝度分布が変なことに気づきました。
ベイヤーFITSから、RGBそれぞれの素子についての輝度データを分離して読み出すところまでは成功したのですが、幅広く分布を見るために対数表示させてみると
f0346040_04495629.jpg
ぎゃー!
これ、絶対にバグってますよね。ちょうど3万2千あたりでどの色も不連続になっているのが分かります。
あ〜あ。完全に「見切った」と思っていたんですが、甘かったようです。

グラフをよく見ると、左半分のトーンカーブがちょうど左右逆転してるような印象。
ベイヤー画像を表示させると所々諧調が反転してるように見える現象が起こっていたのは、これが原因のようです。



★そもそも符号付き16ビット整数とは・・・・

よくよく調べてみると、そもそも符号付き16ビット整数の値は、そのままの値ではなく2の補数表現で記録されていることが判明(汗)。・・・これはもう、「FITSがどうのこうの」という以前の根本的な勘違いでした。
まず正の数、これは普通に記録されているだけです。
ところが、負の数は、次のような手順で記録されていることが分かりました。

 ①絶対値をとる
 ②絶対値を普通に2進数で表す
 ③最上位ビットに0を記録する
 ④全ビットの数値を反転(0は1に、1は0に)させる
 ⑤1を加算する

したがって、ASI1600MC-COOLが出力した値から32768を引いた数値はそのまま記録されるのでなく、さらに補数表現に変換されているというわけです。
たとえば、13298という輝度データは、BZEROシフトで-19380と変換された後、さらに補数表現変換して46156と記録されているのです。

こ、こんなん思いつかんわ~!!(泣)



★というわけで、読み込みのロジック考え直し

というわけで、今度こそ正しい値を読めるようにロジックを考え直します。
変な汗をかきながら(笑)すっかりアホになっている頭で計算した結論だけを書くと、

<前回までに考案した『誤り』ロジック>
最上位ビットが1なら上位バイトから128を減じたのち符号反転
下位バイトについても符号反転

<今回修正した新ロジック>
上位バイトについて、最上位ビットが1なら256を減じるのみ
下位バイトはそのまま

たった、これだけで復元できることが分かりました。
興味のある人はあんまり居ないかもしれませんが、前回「大ウソ」を書いちゃったので、流れを載せておきます。
f0346040_20213600.jpg


★今度こそ!!

早速、読み込みプログラムに上記のロジックを実装して走らせてみます。
f0346040_20223896.jpg
f0346040_20225600.jpg

おお、ブラボー!!
見事につながった♪


たぶん、これで大丈夫でしょう。ベイヤー表示もウソのようにきれいになりました。




★ASI1600MC-COOLの新たな謎

さて、12ビットでADCを駆動したASI1600MC-COOLはデータを吐き出すときに16ビットに変換しているのですが、いったいどのように変換しているのでしょう?

 ○4ビット分は空データ?
 ○16ビットの空間に「散らす」?
 ○それとも何らかの形で「補完」してる?
 ○色チャンネルによって差はある?


こればかりは、ステライメージでトーンカーブ見て(グラフが荒すぎて)分かりません。

・・・で、1ステップごとに輝度分布が見れるようなコードを書いて、RGB各色ごとに解析してみた!

★★★以下続きます★★★


by supernova1987a | 2016-10-03 20:34 | 天体写真 | Comments(4)

ASI1600MC-COOLの謎②

前回の続きです

★ASI1600MC-COOLの『謎』とは

謎①:ASI1600MC-COOLはどのようにデータを書き込んでいるのか? → ほぼ解決♪
謎②:撮影時のパラメータ「HighSpeedMode」の正体は?
謎③:ハードウエアビニングできるのは本当か?
謎④:MMだけではなくMCも赤外線を透過している疑惑

<お約束>
以下の考察は、あぷらなーとの独断によるものです。あんまり参考にしちゃダメです。

★謎②:HighSpeedModeの正体
SharpCapでASI1600MC-COOLを駆動しているとき、意味深な「HighSpeedMode]というフラグがあって、デフォルトではONになってはいるものの「気色悪」かったのですが、どうやら、この設定の「意図」が見えてきました。


販売店からも長らくリンクが張られてないので、つい最近まで知らなかったのですが、ASI1600MC-COOLのマニュアルがZWO本家にアップされていました。(にゃあさん に 先越されちゃいましたが)念のため、こちらです↓


結論として

HighSpeedModeは、転送速度をアップさせるために通常12bit変換するADCを10bitで作動させるモード

なのだそうで、

「画質は落ちるがコマ数が稼げる」

とのこと。完全に月惑星の撮影用ですね。マニュアルにも

「星雲星団の撮影に用いないでね。」(意訳)

と明記されていました。もう!それならデフォルトをOFFにしておいてよ!!
・・・という訳で、お悩みの皆さん、ご納得いただけたでしょうか?

とは言うものの、ちと釈然としないことがあって、さらに色々調べてます。(素のデータを叩いていると、なんか色々と不気味なものが見えてきちゃって色々と考えてしまいます・・・。ガンマ値を1にして撮像すれば、リードノイズとシグナルを弁別できそうな気がする・・・とかの『怪しげ』な妄想。)

※10/7追記※
詳しく検証した結果、Highspeedmode:Onでも12bit駆動していることが分かりました


★謎③:ハードビニングの正体

先日来、冷却CCDと異なり冷却CMOSカメラでは原理的にハードウェアビニングは出来ないのではないかと勘ぐっていたのですが、実際には撮像時にビニング設定があって、謎でした。しかも、通常カラーカメラで2×2ビニングをすれば画素混合されることになり、完全なモノクロ画像になるはずが、なぜかカラーで出力されるという摩訶不思議な現象・・・・。

けむけむさんの検証実験でも、「後からソフトウェアビニングしたのと変わらない気がする」との結果が得られていて、もやもやしていたのですが、本家サイトで有益そうな情報が拾えました。「中の人」らしき人物の発言によれば、

「ハードウェアビニングと呼んでいるけど、実はカメラの中でソフトウェアビニングしてるだけだよ。ちなみに、ビニングを実行するときは、速度を上げるためにADCを12bitから10bitに強制切り替えしてるので、月や惑星専用に使い、星雲星団撮影には使わないでね。」(意訳)

とのこと。ああ、だから2×2ビニングしても画素混合されずにカラーのまま出力されていたのかぁ。『本物の』ビニングができるCCDと異なり、どうもSN比が上がらないような気がしたのも、AD変換時に階調が1/4に減ってるからですね。ビニングして4画素加算でレンジを4倍に増やしても大元が1/4なので相殺・・・・と。
・・・だったら最初から「ハードビニング風機能」とか言って欲しかった・・・・。

★謎④:「MCだって赤外線を透過してるんじゃ?」疑惑
最近色々情報交換させてもらっているASI1600ユーザーの皆さんから、「不思議なコメント」をいただき首を傾げていたことがあります。
それは、ズバリ

「ASI1600MC-COOLは赤外線を透過しているのではないか?」という疑惑です。

皆さん、ごめんなさい。つい先日まで、あぷらなーとは全否定してました。
・・・・だって・・・販売店のサイトとかカタログとかには、こんなこと↓書いてたんですよぉ。

ASI1600MMはモノクロでARフィルタ装備。よって赤外線透しちゃいますので適宜赤外カットフィルタを入れてね。」(意訳)

ASI1600MCの方は、カラーで『IR』フィルタを装備してるので、赤外線は透しません。分光特性グラフの長波長側のデータは無視してね。」(意訳)


ところが、

本家のサイトのQ&Aに「中の人」らしき人物がこんな事を暴露してた。
(ひょっとして販売店さんも知らない情報??)

「えーと・・・当初、MCの方はIRフィルタ付けて売るつもりだったんだけど、発売の最終段階でARフィルタに変えちゃった。なので、実際は赤外線を透しちゃうから赤外カットフィルタを追加しないと普通の写真は撮れないよ~。」(超意訳)

げげっ!!
そ、それ、ほんまですか?!

ていうか、「最終段階」っていつのことなの?
Rev2のこと?それともRev1を量産した段階ですでに??

LPS-P2とかの光害カットフィルタは赤外カット特性を持ってるので、天体写真を撮る段には実害はないけど、そ、それ早く言ってよね~。
暗い所だと普通に写るのにピーカンの昼風景がハチャメチャな写りだったので(ちょっぴり)怪しいとは思ってたけど、まさかカタログスペック自体が嘘だったとは・・・。・・・・・悪夢だ。

しかしよく考えると
これ、無改造で『冷却赤外カラーカメラ』になるってことですよね?
あぷらなーと個人にとっては無茶苦茶魅力的です。早速、やりたいこと(満月時の流星撮影とか・赤外カラーの風景写真とか)が増えました。夢がふくらみますねぇ。(例のコメントが事実だったとすれば・・・ですが。)

※10/10追記 確かに赤外線に感光する事を確かめました




★「開発ごっこ」の方は・・・
ついに素のRAWデータを上手く読めたと思ったら、RGB各8bitに圧縮しようとしたら表示が変になっちゃった。
という訳で、徐々に色んなものをテスト実装しつつ、迷走してます♪
ま、こんなのがパズル解いてるみたいで楽しいのですが・・・・。

f0346040_00170483.jpg
★★★以下、「進展」したら更新予定♪★★★



by supernova1987a | 2016-09-27 07:31 | 機材 | Comments(10)

ASI1600MC-COOLの謎①

★ASI1600MC-COOLの『謎』

ZWO社の冷却CMOSカメラASI1600MC-COOLは、とにかく『謎』が多いですねぇ。同じカメラを使っているユーザーさんと色々情報交換させていただいているのですが、皆さんお悩みのようで♪

最近無謀にも始めたDelphiでの『開発ごっこ』のおかげで、下記の『謎』が判明しそうです。

謎①:ASI1600MC-COOLはどのようにデータを書き込んでいるのか?

謎②:撮影時のパラメータ「HighSpeedMode」の正体は?

謎③:ハードウエアビニングできるのは本当か?

謎④:MMだけではなくMCも赤外線を透過している疑惑

<お約束>
以下の考察は、あぷらなーとの独断によるものですので、信憑性があるとは限りません。
誤りが散見するかもしれませんので、あんまり参考にしないでください。

★謎①の解明『ごっこ』

Delphiでゴソゴソとプログラミングしながら、色々調べたりデータ解析してみた結果、およそ次のことが分かりました。


★ASI本体からFITSファイルへの記録方式
そもそもFITSって天体研究者用の汎用フォーマットだったのですね。全然知りませんでした(汗)

○記録された画像データの型は16bit整数(符号付)です
数値は16桁の2進数で記録されていますが、注意すべき点は16桁全てが数値を表しているのではなく、最上位のビットは「符号」を示しているということです。この値が1ならばマイナス、0ならばプラスを示します。そして残りの15ビットで絶対値を表します。
f0346040_20473337.jpg
したがって、位(桁)をiとし、値(0か1)をNiとすると、絶対値はΣ2^(i-1)*Niで示されます。
これに最上位ビットの値N16を合わせると、符号付きの数値は
(-1)^N16*Σ2^(i-1):*Niとなります。
この場合、格納できる数値は【-32768~+32767】の65535通りとなりますね。

***************************************
※10/3追記
これ、ウソです。確かに上記のような記録法もありますが、FITSはこれとは異なる「補数表現」を使用していることが判明しました。
詳細は、10/3のブログ↓を参照してください
***************************************

★ここで問題発生!!
FITSの形式では、正の数値は16bit分ではなく(符号で1bit取られるので)15bit分しか格納できません。
そもそも天体写真では明るさが『マイナス』にはなり得ないので、半分が無駄ですね。
そこで何らかの「トリック」が必要となります。
f0346040_21053700.jpg
「トリック」とは、
f0346040_21382675.jpg
このように、左にシフトして書き込んでしまうと言う仕掛けです。(よくこんなこと思いつくなあ)
したがって、本来【0~65535】のデータがFITSの中では【-32768~32767】として格納されているわけですね。

★ヘッダにあるBzeroの正体
このような仕掛けがなされているため、FITSファイルから画像データを読み出すときには、素の値に32768を加算してやる必要があります。
というわけで、先日「謎のパラメータ」だと言っていたFITSのヘッダにある第13番目のパラメータ:「BZERO=32768」の正体は、このシフト量と判明しました。(ああ、たぶんFITSを扱っている人には常識なんでしょうけどねぇ・・・・。)

★CPUのメーカー依存性
Delphiと格闘しつつも、どうもデータがおかしい状態が続いて頭を抱えていたとき、ふと、大昔(20年以上前)に大学の研究室で「観測データを解析する時に悩まされた」ことを、思い出しました。
当時、宇宙線の観測データを解析する際にハチャメチャな数値ばかりが出てきて半泣きになっていた時に、観測データを記録する際に用いたPC-9801VM(CPU:80186)とデータ解析に用いたスパークステーション10(CPU:SuperSPARC)とでデータの記録方式が異なることを知りました。いわゆるSPARC系のCPUは普通に上の桁から(左から順に)書き込みますが、インテル系のCPUは不思議なことに2バイト(16bit)のデータを書き込む際に、上位バイト(左の1バイト8bit分)と下位バイト(右の1バイト8bit分)を「逆転」させて記録する仕様だったのです。したがって、インテル系のCPUで記録したデータをSPARC系のCPUで読むときにはデータを2バイトずつに区切って、上下(左右)を入れ替えないと正しく読めないよ、というお話しです。

★リトルエンディアンとビッグエンディアン
普通通り上位(左)から順に記録する方式を「BigEndian」方式といいます。どう考えても普通ですよね。
f0346040_21502406.jpg
それに対してデータの上位バイトと下位バイトを逆転して記録する方式を「LittleEndian」方式と言います。
現在主流のインテルやAMDのCPUは全てLittleEndian方式で記録するタイプです。
f0346040_21515655.jpg
したがって、インテル系のCPUで記録したデータをSPARAC系のCPUで読むときにはデータを2バイトずつに区切って、上下(左右)を入れ替えないと正しく読めないよ、というお話しです。
(例)真の値:41867(16進数で表すと A3 8B )のとき、インテル系CPUでは「 8B A3 」と記録される。
したがって、本当は41867という数値なのに実際には35747という値で記録されていることになりますね。

ちなみにWindowsはLittleEndian方式で動作しています。・・・では、インテルやAMDのCPUを介してデータを記録したFITSファイルは、なにも問題なく画像を読み取ることができるのでしょうか?・・・いやいや、さらに厄介なことがありまして・・・。

★ところが、そもそもFITSは・・・
FITSファイルはプロの研究者も使う万国共通の測定データフォーマットですので、解析に用いる計算機はパソコンではなく、ワークステーションやメインフレームである可能性も高いと推察されます。そこでFITSの規定を調べてみると、「必ずBigEndian方式で記録すること」と定められていました。
ASI1600MCを制御したのはAMDのCPUを搭載したPCで、しかもOSはWindowsなので、普通は上下反転させたLittleEndian形式で数値が記録されているはずです。検索エンジンでヒットした某フォーラム中でのコメントでも、たしかに「LittleEndianだ」とのコメントを見つけることができます。しかし、そもそもBigEndianでの記録を定めているFITSにLittleEndianで記録するだろうか?これだとプロが困るんじゃ・・・というのが疑問で、なかなか結論が出ません

問題を整理しておきます。

 ①インテル系・AMD系CPUでは数値をLittleEndian形式で記録する仕様

  ・・・ふむふむ。つまり数値の上位バイトと下位バイトは反転している訳だな。

 ②WindowsもLittleEndian形式に準拠している

  ・・・ほうほう。じゃあ、やはりFITSファイルの中身は数値の上位バイトと下位バイトが反転しているということだな。

 ③しかし、そもそもFITS自体がBigEndian形式で記録するよう定めている

  ・・・えっ?!

うえーん。
ややこしいなあ、まったくもう!一体どっちが正しいの??
今回あぷらなーとがデータの読み込みに四苦八苦した理由がここにあります。

★・・・仕方が無いので
らちがあかないので、力技で1バイトずつデータを細切れに読み出して色々と分析した結果

・・・・・・・・・BigEndian形式(らしい)と判明しました。

ああ、なんということ!。
せっかく1ワード単位(2バイト丸ごと)読み込んで直接「ShortInt型」の変数にぶち込めば符号も含めて一発解決だと踏んでいたのに、いざやってみると「むちゃくちゃ」な数値ばかりが出ていた理由が、これでした。

・・・やれやれ。

★結局、考案した読み出し方法は・・・

①画像データを1バイト分読み込み、バッファーに格納する
②次のデータを1バイト分を読み込んだら、先ほどとは異なるバッファーに格納する
③上位バイトのデータの最上位bitを読んで符号を決める(0なら正、1なら負)
④符号を決めたら、上位バイトの最上位bitを消す。(理論的には128を引けばいいはず)
⑤上位バイトと下位バイトの両方に共通の符号を与える
⑥上位バイトの値に256を掛けて、下位バイトと加算する
⑦最後にBZero値(32768)を加算して補正する

・・・ロジックはできたので、早速Delphiでプロシージャ(サブルーチン)を書きます。
f0346040_22120885.jpg
・・・・ん。完成♪
******************************
10/3追記
ごめんなさい。このロジックも間違ってます。
詳細は上にリンクしている10/3の記事をご覧ください
******************************



★そして、これが本邦初公開(?)の
DelphiでFITSファイルから読み込んで解析した
ASI1600MC-COOLののRAWデータの「正真正銘無加工の」トーンカーブだあっ!!

f0346040_22301035.jpg
どうですか?
美しいでしょう?

え?「なんで山が3つもあるの?」ですって??

そりゃもう、実際に「R」と「G」と「B」の3種類のセンサーが混在してますからねぇ。
そもそも、カラーカメラなのにベイヤーデータのトーンカーブが1本につながってちゃおかしいんです。
ステライメージとかで見慣れたベイヤーデータのトーンカーブは、おそらく自動的にゴニョゴニョされちゃった後だと思います。

******************************
10/3追記
ごめんなさい。この分析結果も間違ってます。
詳細は10/3の記事をご覧ください
******************************

※「あれ?これ先週までのDelphi7のコーディング画面となんか違う!?」
と思われた方は、もう「Delphiの呪縛」にかかってます。
ええと、その・・・RAD-Studio-10.1『Berlin』に乗り換えました(最新版のDelphiですね)。

あの・・・今なら「スターター」が、・・・ま、まさかの「無料」ですよぉ・・・・・・。
64bitネイティブコンパイラは止められていますが、ほとんどの機能は使えそうですね♪
無料バラマキ作戦って何年ぶり??ひょっとして、またDeilhiの時代が来る・・・のか?

★★★その他の『謎』は、後日続けます★★★


by supernova1987a | 2016-09-26 22:42 | 機材 | Comments(6)

晴れない夜は基本の復習⑧

★「Delphi日和」の顛末

悪天候のため、まったく写真が撮れないのを逆手にとって「Delphi日和」と位置づけた休日ですが、結局丸一日Delphiと格闘するハメになりました。はい。例のASI1600MC-COOL様の画像処理ソフト『開発ごっこ』です。RAWファイルのヘッダを読み込み、撮像データを引っ張り出すところまでは良かったのですが・・・・・・・。


★感覚が鈍ってるのにも程がある

しかし、苦戦しました。なにがって・・・それはもう、酷い有様。
とにかく自分が『完璧な』素人に戻っているのを感じて、自己嫌悪。

<トラブル①>
EAccessViolationで落ちまくる!
昔は良く目にしていたんですがねぇ。思い出せませんでした。今回のケースは確保した配列の要素数を超えるデータをロードしようとしたのが原因。

<トラブル②>
stack overflowで落ちまくる
これは、一般のアプリでも見かけますよね。要するにメモリが不足してるんですが、今回の場合はDelphiの配列に割り当てられるメモリの上限を変える方法を思い出せずに悪戦苦闘していたという顛末。なにしろ、4656×3520の巨大データですものねえ。

<トラブル③>
いくら頑張ってもRAW画像が変!

こればっかりは教則本がありませんので自力で考えるしか無かったのですが、思いついたロジックがことごとく玉砕。

ちなみに「初歩的」なところでは、

 ☆2バイトのバイナリデータを整数値に変換する方法が思い出せない
 ☆データストリームから各個データを読み込むためのバッファーをバイト型で宣言してたのに、その上限を超えるようコーディングしていた
 ☆計算上の要素数と実際の画素数のズレを見逃していた

という燦々たる有様でしたが、とにかく強敵だったのが、「ところどころ階調が反転して見える」という怪現象でして・・・。結局、犯人は(うすうす感じてはいましたが)ヘッダに記録されている「BZERO=32768」なるパラメータの意味するところ。要するにASI1600MC-COOLは12ビットで記録したデータを16ビットで記録しているので、残りの4ビット分の『空白』がどうなっているのかという問題です。結論として、1画素につき2バイトで記録されている各画像データの上位バイトに80が加算されているのが犯人でした。16進で8000=32768ですものねぇ。

★苦節15時間の結果・・・
f0346040_00000847.jpg



・・・ついにっ
f0346040_23491586.jpg
ASI1600MC-COOLのRAWデータから、
ベイヤー画像を取り出すことに成功っ!!

うひゃー。疲れた

これで、『敵の城門』を突破したことになるので、
あとは、いかようにも料理できますね。

なんか、ちょっとやる気が出てきた♪

あ、M42の画像が鏡像になっているのは、ご愛敬。
・・・もう、ディスプレイのY座標は上から下に計るっていう「基礎中の基礎」すら頭から消えてたという(笑)。ま、後からどうにでもなります。

by supernova1987a | 2016-09-19 23:53 | 天体写真 | Comments(9)

晴れない夜は基本の復習⑦

★台風の接近に伴い

台風16号が日本列島に接近中です。皆様、お気をつけください。
さて、というわけで、せっかくの休日ですが

 ○天体写真撮影・・・無理
 ○風景写真撮影・・・無理
 ○バードウォッチング・・・無理
 ○部活の生徒指導・・・お休み(※注:私、学校の教師ではありません)

うーん

こ、これは

まさに

「Delphi日和」っ!

すみません。負け惜しみです。

★先日封印を解いたDelphi7で
f0346040_20040886.jpg
先日実家の物置にある「封印箱」から急遽召還したDelphi7Proですが、ゴソゴソと作業を始めました。
とはいえ、プログラミングのブランクが10年以上あるので、まだヨチヨチ歩きのヒヨコ状態。

★今週の目標は

欲張ると失敗するので、こんなもんですかねぇ。
①ASI1600MC-CoolのRAWデータをきちんと読む
 (どこまでがヘッダで、どういう風に画素データが格納されているのか)
②とりあえず、4画素、たった4画素分で良いのでRAW現像したい。

★少し慣れてきました

累計で6時間ほどDelphiに触ったでしょうか。
徐々に、色々思い出してきました。

まずは、Delphiの統合開発環境下のエディタオプションを「かつての」お気に入り設定に復旧です♪

 予約語とユーザ変数が同じ色だったり
 生きた行とコメント行が同じ色だったり
 数字の1と大文字のIと小文字のlが同じ形だったり

などすると、(乱視と近視と老眼の三重苦が始まった)あぷらなーとがコーディングすると、ミススペルしまくりますので、ゴソゴソと設定を変えます。
ちなみに背景は絶対に『黒』派です。(ソラリス使っていた若い頃は白背景派だったんですがね)
そうそう、フォントも大きめで(笑)。
f0346040_02441318.jpg
うん。こんな感じかなぁ?だいぶ見やすくなりました。


★データを少しづつ読み込んで調査した結果

慎重にASI1600MC-COOLのRAWデータを読み込んでみた結果、次のことが分かりました。

f0346040_02550668.jpg
○判明した事・その①

ASI1600MC-COOLのRAWファイル(FITS)は、どうやら
大きく分けて3つのブロックに分かれているみたいです。

 Aブロック:撮影データなどのヘッダ
 Bブロック:ブランク領域
 Cブロック:撮像データ(各画素の輝度データ)

○判明した事・その②
 Aブロックについて

撮影データのヘッダは、ASCIIコードによる1バイト×80=80バイトで1項目を表しているみたい。
f0346040_03002587.jpg
基本的なレコード構造
【パラメータ名】 【=】 【値】 【/】 【コメント】

第1パラメータ:SIMPLE 
 ASI1600MC-Coolで撮影した物は全て値として「T」が格納されていました。調べてみると、SIMPLE変数は、標準FITSかどうかを表すものみたいです。ああ、なるほど「True」だという訳ですか♪
ちなみにコメント欄には撮影時刻が秒まで記録されています。

第2パラメータ:BITPIX
 画像が何ビットで記録されているかを表すパラメータのようですね。上記の例なら「16bit記録」を表しています。

第3パラメータ:NAXIS
 コメントにDimensionalityと書かれているので、明らかに何次元データかを表していますね。上記の例なら2次元データというわけです。というかデジカメなんだから2次元に決まってます。

第4パラメータ:NAXIS1
 第1軸の変域(ASI1600MC-COOLなら長辺のピクセル数)を表します。4656ピクセルですね♪

第5パラメータ:NAXIS2
 第2軸の変域(ASI1600MC-COOLなら短辺のピクセル数)を表します。3520ピクセルですね♪

第6レコード:COLORTYP:
 カラータイプの略でしょうか?ベイヤー配列の型が格納されています。はい、確かに「GRBG」型だと記録されていますね。(もう、ステライメージさん、ここ読んでくれたら自動でデモザイクできるのに~!)

第7パラメータ:CCD-TEMP:
 本来はCCD用のフォーマットなんでしょうが、CMOSセンサーの冷却温度が記録されています。「-10℃」という訳ですね。

第8パラメータ:YBININNG:
 Y軸方向のビニング数なんでしょうね。ちと自信がありません。

第9パラメータ:INSTRUME
 インスツルメントの略でしょうね。撮影機材名というわけですね。「ASI1600MC-COOL」と記録されています。

第10パラメータ:DATE-OBS
 撮影日時だと思うんですが、ちと妙ですね。第1レコードの時刻と9時間ズレています・・・・ああ!時差ですね。というわけで、こちらの時刻は世界標準時のようです。

第11パラメータ:SWCREATE
 ソフトウェア・クリエイトでしょうか?撮像ソフト名ですね。「SharpCap」と記録されています。

第12パラメータ:EXPTIME
 露光時間ですね。秒単位で記録されているようです。

第13パラメータ:BZERO
 これ、謎のデータです。今のところ、これが「ゼロ点補正」(オフセット値)ではないかと睨んでいます。「32768」ねえ・・・・・。一見変な数値に見えて、これ、16進の2バイト表記なら「80」・「00」となり、とてもキリの良い数値ですからあり得そうです。そのうち真面目に検証してみましょう。

第14パラメータ:EXTEND
 拡張フラグ??・・・一応True値が書き込まれており、コメントにも「Extensions are permitted」(拡張機能が許可されている)と記録されていますが、意味不明です。

第15パラメータ:XBINNING
 X軸方向のビニング数なんでしょうが、やはり自信がありません。

第16パラメータ:YPIXSZ
 撮像素子のY方向のピクセルサイズのことでしょうね。「3.8」とありますので単位はマイクロメートルのようです。

第17パラメータ:XPIXSZ
 撮像素子のX方向のピクセルサイズでしょう。「3.8」ですね。
 
第18パラメータ:END
 ここでヘッダ要素が終了することを表すようです。

○判明した事・その③
 Bブロックについて

これ、FITSの仕様なのか、カメラ側の仕様なのか分かりませんが、ちょうどAブロックと同じ広さの領域が「スペース」(ASCIIコードの0x20)で埋め尽くされています。そもそも80バイトのパラメータ×36で1レコードという規格なのかもしれませんね。

○判明した事・その④
 Cブロックについて

いよいよここからが、『本丸』(撮像データが記録されているエリア)のようですねぇ。
さて、ボチボチ読んでみましょうか・・・。
ASI1600MC-COOLは、AD変換した段階で12bitデータになり、それを16bitデータとして書き出していると広告に書かれているので、2バイトで1ピクセルの輝度を表しているのだろうと勝手に予測。

2バイト分を呼び出して、最初の1バイト分を上位バイト、その次の1バイト分を下位バイトと見なして10進整数値に変換を試みます。

ゴリゴリとコードを書いて
・・・・えいっ!っと。
f0346040_04112544.jpg
第1ピクセルの輝度データは、16進で「A632」。10進に直して「42546」と呼び出せました。
もしも16ビットをフルに埋めると、輝度データの上限は16進で「FFFF」で10進なら「65535
」。一応その中には収まっているので、あり得ない値ではないし、まあ良しとします。(ホントか?)

★さて・・・・と

「敵」の正体は、ほぼ掴めてきました・・・が。これ、客観的に言って、「1600万人の敵兵のうち、1人だけ捉えた」って状態ですよねぇ。
むむむむむ。ここから、一体どう「攻め」ようか・・・・・?????最大の障壁は、昔と違って、・・・ろ、ロジックが沸いてこないっ!
うぇーん(涙)。
よし、今日のところは・・・・寝ます。


by supernova1987a | 2016-09-19 04:46 | 天体写真 | Comments(2)

晴れない夜は基本の復習⑥

★Delphiのリハビリ開始っ!
ついにDelphiの封印を解いてしまい、『なんか開発するぞ』と大見得を切ったは良いけれど、なんだか最近の皆様のコメントを拝見していると、出てくる用語の系統から「ただ者じゃ無い感」が伝わってきて、ビビってるあぷらなーとです。

おそらく、「えっ?『Hello World』のコンパイルが通らない状態から、なにか開発する気?・・・正気か?」と心配(?)されていると思いますので、週1ペースではリハビリ状況を掲載することにしますねぇ。ちなみに現在の環境でプログラミングに充てられる時間は、毎週月曜日(本業の定休日♪)の数時間足らずです。

★リハビリ1日目
<目標>
 ①とにかく発掘したDelphiの開発環境を稼働させる。
 ②入門書1冊の重要なところだけ読破。
 ③最終目的地に向けて「第一歩」を踏み出す。

<結果>
 なんとか目標クリアです。

・・・というわけで

★最初の一歩♪
とにもかくにも、まずASI1600MC-COOLで撮像したRAWデータを読めないことには進みませんので、ここに突破口を開けることにしました。

出でよDelphi!!
うりゃー!
f0346040_03073931.jpg
色んな本や過去のソース(分野は全然画像処理と違いますが)見ながら、度重なるミススペルと文法エラーに耐えながらガシガシコードを書きます。
色々初歩的な感覚が少しばかりよみがえってきました。
いや、ブランクがブランクだけに、最初は変数への代入が「=」なのか「==」なのか「:=」なのかで右往左往する位の酷さでしたが、我ながらよく頑張りました♪

コンパイル!ラン!

・・・うっわ。久しぶりに見たけどDelphiってコンパイル速っ。
まさに目にも止まらぬ速さですねぇ。
f0346040_03142330.jpg
ボタン1を実行すると、すぐにファイルを指定する窓が開いて・・・
ASI1600MC-COOLのRAWファイルをクリックすると・・・・

よっしゃ~!
f0346040_03162591.jpg
FITSファイルのバイナリをゴリゴリ読み込んで16進で表示しながら、ヘッダ部分から撮影データを抜き取って表示することに成功♪
ささやかですが、確実に「一歩だけ」前に進みました。

はぁはぁ、ぜぇぜぇ・・・。今週のリハビリは、ここまでですね。

★★★以下、進展した場合だけ、続く予定★★★


by supernova1987a | 2016-09-13 03:23 | 天体写真 | Comments(8)

晴れない夜は基本の復習⑤

★先日来やっている・・・
EXCEL-VBAを使ったRAW現像『なんちゃってシミュレータ』ですが、
今回はいよいよノイズデータの再現機能を実装してみました。

仮定したノイズは下記の通り

①ダークノイズ
 いわゆるホットピクセルが固定セルに生じると仮定
②ショットノイズ
 光電子の量子論的効果により不可避なランダムノイズを仮定
③リードノイズ
 CMOSの各ラインを読み出した際に正規分布に基づきゲイン変動すると仮定


★たとえばこんな感じになりました

左画像:仮定した元画像(これが本来の天体の像だと仮定)
中画像:上記①②③のノイズを含めて記録されるRAWデータのシミュレート
右画像:標準的なデモザイク処理で現像した場合のシミュレート
f0346040_19534798.jpg
『邪ノイズ』(横しまノイズ)とホットピクセルがきれいに再現できました♪


★となれば、すこし本気出して・・・・

Excel+VBAでは、上記の処理だけで(たった1600画素で)30秒も演算時間がかかるので、その1万倍の画素数を持つASI1600MC-COOLだと83時間(!)もかかる計算になって、お話になりません。・・・というか、4000行のEXCELワークシートとかあり得ない(笑)。そろそろ『封印』を解く時がやってきたようです。


★出でよ!懐かしのDelphi7っ!!

実家の物置を2時間探し回って、ついに発掘しました。
約10年間封印していた「MY開発環境セット」♪
f0346040_20040886.jpg
2002年(かな?)リリースのボーランドDelphi7プロと、参考文献の山です。
いやー。まさかコイツらがゾンビのごとく目を覚ます時が来るとは・・・・・。
・・・あ、くれぐれも私はプログラマーでもSEでもありません。業務の必要に迫られて(泣く泣くボランティアで)数千~数万行程度の小規模アプリのソース数本書いたことがあるだけの素人です。
f0346040_20084216.jpg
ああ、書籍に貼りまくってある付箋が昔の(2週間で15kg痩せた)地獄の日々を思い出させます。
あの思い出したくない日々を繰り返すつもりはありませんが、のんびりと復習を始めるとします。とりあえず付箋貼ってるところだけ読み返して、自分が昔書いたソースを読めばいいか・・・的な・・・・。

さて、まずは入門書から・・・・・・・・・

・・・ん?あれれ??

うぇーん。
な、なにも覚えていない!!

そうか・・・人間、イヤなことは積極的に忘れる動物だと言うしなあ・・・。


★そんな事よりも、そもそも・・・

ああ、もっと大切なことがありました。
Delphi7はWindows98SEとか2000とかが主力だった時代の『遺物』。
そもそも、Windows10で動くのか?!

・・・・で、早速やってみた。
「インストールの上限回数を超えた」ので自動アクティベーションできないとか、インストールも開発環境の立ち上げも全て管理者権限でやらないとエラーが出たりとか、些細なトラブルはありました・・・が!!

ばば-ん!
f0346040_20191925.jpg

おかえり♪Delphi
なんか色んな意味で泣きそう・・・・。
じゃじゃ馬のDelphi7よ。まあ、お手柔らかに頼むわ・・・・。

えっ?今のあぷらなーとのコーディングスキルですか?

ええ・・・と、正直言って良いですか?

何も見ずにコードを書いたら『Hello World』がコンパイル途中で止まった!・・・というレベル。

エラーメッセージの意味が分からなくて(Delphiのエラーメッセージって核心を突いてこないんですよねぇ)よく見ると、行末に「;」忘れてることに気づいた時には、自分のアホさ加減に笑ってしまいました。
もう、PascalとBasicとFORTRANとCとSQLの断片的知識が「ちゃんぽん」になってることを再認識しました・・・です、はい。

★★★以下、不定期掲載★★★
ここからは勉強の日々なので、すぐには記事が続きそうにはありませんなぁ(笑)。
・・・別ジャンルの記事ばかりが長期間続いたら、今回の記事のこと、暖かく忘れてやってください。


by supernova1987a | 2016-09-12 20:45 | 天体写真 | Comments(6)

晴れない夜は基本の復習①

★台風一過の秋空・・とはならず
今回の休日は曇りでした。新たなテスト撮影ができないので、基本に立ち返って色々勉強し直すことにします。
さて、ASI1600MC-COOLのノイズ特性は極めて優秀です。
・・・が、前愛機ASI174MC-COOLとどの程度違うのでしょうか。
実際の天体撮影画像で比較してみます。

条件(撮影日)が異なるので直接比較はできませんが、基本的データは次の通り

撮影月:ASI174MC-COOL:2016年5月 ASI1600MC-COOL:2016年8月
望遠鏡:VMC260L+レデューサVMC+LPS-P2 (両者共通)
冷却温度:ASI174MC-COOL:-15℃ ASI1600MC-COOL:-10℃
ゲイン:ASI174MC-COOL:300 ASI1600MC-COOL:400
露出:15秒 (両者共通)
撮影対象:亜鈴状星雲M27(両者共通)
画像処理:レベル調整のみ(ダーク減算も無し)


★ASI174MC-COOLの撮って出し(ノートリ)
f0346040_23252376.jpg
いや、これでも驚異的な写りだと思うんですよ。市街地ニワトリのたった15秒で・・・。
冷却の威力でホットピクセルはほとんど消滅しているのも特筆すべき点です。
ただ残念なことに、画面全体に見られる強烈な『横しまノイズ』と画面右下の盛大なアンプノイズが痛いですね。
また、メーカーサイトの分光特性資料から予測していたことですが、緑に対して赤の感度が低いのが分かります。

★ASI1600MC-COOLの撮って出し(ノートリ)
f0346040_23344439.jpg
対して、ASI1600MC-COOLだと撮って出しでコレです!
ホットピクセル無し・シマシマノイズ無し・アンプノイズ無しの三拍子が揃っています。画素数とかフォーマットが云々以前に基本的な性能が雲泥の差。
しかも、明らかにHα線に対する感度がASI174MC-COOLよりも(緑に対して相対的に)高く感じます。

★ASI174MC-COOLの撮って出し(トリミング)
f0346040_23391719.jpg
中央部をピクセル等倍で切り出した物です。中心星の青い色や星雲内の色の変化など良く写っていますが、ノイズが・・・。


★ASI1600MC-COOLの撮って出し(トリミング+縮小)
f0346040_23393786.jpg
ピクセルサイズが174と異なりますので画像を縮小して切り出した物です。
色特性としては、ちょうどIR改造のD5000と似たような感じでしょうか。とにかく赤い星雲が良く出ます。
変なノイズが一切無いところも素敵です。

★それでも・・・・・
このようにASI1600MC-COOLは驚異的に低ノイズなのですが、それでも淡い天体を炙り出そうとすると、嫌なシマシマノイズが出ます。
・・・というか、出ないカメラってあるのか?というのが正直なところなのですが、とにかく何か工夫がしたいところですね。
試行錯誤するための準備として、今一度ベイヤーデータについて考えてみることにします。
・・・ううむ。色んな原理の理解のため、13年ぶりにEXCELのVBAコード触ってみることにします。
ああ、丸10年以上コーディング(プログラミング)から遠ざかっていたので、もう何も覚えていないでしょうね・・・・。少しは復習しておくんだった。




by supernova1987a | 2016-09-06 01:48 | 天体写真 | Comments(2)

満天の星空目指してリベンジ③

★やはり星座は冬の優勝ですね
とにかく冬の星座は豪勢ですよね。先日のプチ遠征で薄明前に冬の星座が上ってくるのを見て、一人でテンションが上がってしまった、あぷらなーとです。
・・・というわけで、8月30日に撮影した『冬』の写真データを処理しました。

★星座の王者オリオン
f0346040_20092076.jpg
久しぶりに持ち出したポータブル赤道儀ケンコースカイメモNSにIR改造D5000+サムヤン35mmF1.4を載せてオリオン座を狙いました。

絞りF2.8・ISO1600・30秒露光の撮って出しだと、こんな感じ。
f0346040_20104527.jpg
さすがIR改造D5000+カメラ内蔵型のLPS-P2フィルタの威力で、なんだかオリオン座大星雲M42とか鮮烈に写っています。
ただ、背景色が汚いですね。また、バーナードループやエンゼルフィッシュ星雲が弱いです。

そこで、ソフトウェアビニング+16枚コンポジット+デジタル現像その他色々調整してトリミングしてみると・・・
f0346040_20135678.jpg
ああ、良い感じです♪
さすがに分子雲などを炙り出すほどのテクニックは持ち合わせていませんが、なんか天文少年だった頃に憧れた写真のイメージですね。
ベテルギウスのオレンジとリゲルの青白色もきれいに出せました。本当に久しぶりにオリオン座を撮りましたが、そらの状態が良いと楽勝ですね・・・。

★星雲の王者M42
超メジャーですが、本当に奥が深くて何度撮っても飽きないのがオリオン座大星雲M42です(私だけ??)。
今回は、自己ベストの滑らかさを出すべく、初の二段階露光に挑戦です。

撮影データは次の通り
 VMC260L+レデューサVMC(1860mmF7.1相当)+LPS-P2フィルタ
 ASI1600MC-COOL 冷却温度-15℃
 K-ASTEC改造newアトラクス+QHY5-IIMオートガイド(PHD使用)
 ゲイン:400 露光:10秒×100コマ&5秒×50コマ

さて、150コマコンポジットをしてみましょう。
f0346040_20305395.jpg
※ほぼノートリミング

さすがにASI1600MC-COOLで明るい天体を150コマコンポジットすると、ほとんどノイズ感無しになりますね。
(厳密にはガイドエラー方向【画面短辺方向】に縮緬状のノイズが残っています。)
ややシャープさに欠けますが、いつもよりフンワリと仕上げてみました。
ありきたりな描写ですが、いかにもM42っていう感じがしますね。


★ちょっと気になったことが・・・
段階露光したのに中心部が飛んでしまったのには理由があります。
実は市街地でニワトリした際にはゲイン400の15秒露光でも全然サチらなかったので、余裕見て5秒と10秒で楽勝と読んでいたのですが、なぜか10秒露光のコマの全てが中心部トンでました。??????? バックグラウンドがあると飛びにくい??いやいや、そんなバカな・・・・・。
ASI1600MC-COOL、どこまで行っても謎だらけです。ま、そこが面白いんですがね。






by supernova1987a | 2016-09-03 05:33 | 天体写真 | Comments(6)

満天の星空を求めてリベンジ②

★久々の満天の星空の下
8/30の夜の満濃池遠征では、まずD810A+シグマ20mm+スカイメモNSできれいな秋の天の川が撮れましたが、本命の機材で撮像したデータもボチボチ処理をしてみましょう。ちなみに色々と『検証ごっこ』するつもりだったのですが、いかんせん夜前半がドン曇り+一時雨という悲惨な状況だったので、VMC260Lの撮影準備が完了したのが1:40という始末。4:00の薄明まであまり時間が無いので、色々とパラメータを変えて実験している余裕がなく、とりあえず「たぶんこれが『正解』」という設定を信じて「本命の天体」を各個撃破していくことにしました。

★本日の『本命』は・・・
ずばり、「カニ」です♪
はい。おうし座の超新星残骸であるM1かに星雲ですね。
相当にメジャーな天体のハズなのですが意外と難敵です。
昨年IR改造D5000とVMC260Lで市街地からチャレンジした時には、あまりにも悲惨な写りでブログにも載せられずボツ箱行きになりました。
ちなみに、昨年撮影した かに星雲の元画像(レベルだけ調整)がこちら↓
f0346040_15443310.jpg
これは相当な枚数をコンポジットしてもなかなかまともな像になりそうにありません。

★今回の装備は
お盆の撮影時にK-ASTEC改造ニューアトラクスのオートガイドを初めて行った際、どうもガイド鏡がたわんでいるようだったので今回は
f0346040_15460925.jpg
鏡筒の『下』に取り付ける方式で行きます。いわゆる『親子亀方式』ならぬ『コバンザメ方式』ですね♪
前回のテスト運用でミニBORG50+QHY5-IIMの場合、どこに向けてもほぼガイド星が見つかる状況だったので微動装置は排除。鏡筒バンドを直接アリミゾにつけました。これで幾分ガイドエラーが緩和されることでしょう。
f0346040_16022209.jpg
★いざ撮影!
今回の主要撮影データは次の通りです。

VMC260L+レデューサVMC(1860mmF7.1相当)+LPS-P2フィルタ
ASI1600MC-COOL 冷却温度-15℃
K-ASTEC改造newアトラクス+QHY5-IIMオートガイド(PHD使用)
ゲイン:400 露光:20秒 保存形式:RAW(FITS)

準備に手こずりましたが、いざ撮影が始まると快適です。
sharpcap2.8の時には連続撮影しているように見えて、途中で勝手に止まるという不具合がしばしば発生していましたが、2.9にしてみたら嘘のように安定動作しています。バグだったのかなあ??

★撮って出し画像は
こんな感じです
f0346040_16133055.jpg
なにがなんだか分かりませんね。ええ、結構かに星雲は暗いんです。
・・・で、レベル調整するとこんな感じ。
f0346040_16142116.jpg
おおっ!これは良い感じです♪
ザラザラですが去年撮ったヤツとは雲泥の差。コンポジットすれば相当な像に化けるのは間違いありません。

★取り急ぎ最低限の画像処理を・・・
諸般の事情でまだダークファイルが撮れていないので、ステライメージのホット&クールピクセル除去フィルタで代用します。
こんなとき、ダークノイズが少ない冷却カメラは処理を妥協できるので良いですね。

では、100枚コンポジット行ってみます♪

すると・・・
f0346040_16185512.jpg
おお、まさしく『かに星雲』~。

ほんのり青い本体に纏わり付くように赤いフィラメント構造。
なんだか立体感を感じますね。
そう、こんなのが撮りたかったんですよ♪

・・・やっぱ冷却+良い空だと違いますねぇ。


by supernova1987a | 2016-09-01 05:18 | 天体写真 | Comments(11)


タグ
最新の記事
記事ランキング
ファン
ブログジャンル
画像一覧
外部リンク