あぷらなーと


あぷらなーとの写真ブログ
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あぷらなーと が

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

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

生息地:香川・徳島
カテゴリ
最新のコメント
> kem2017さん ..
by supernova1987a at 23:18
子供の科学は読んでなかっ..
by kem2017 at 16:39
> オヤジさん オヤジ..
by supernova1987a at 07:38
あぷらなーとさんも、子供..
by オヤジ at 06:19
> kem2017さん ..
by supernova1987a at 23:59
藤井旭先生の「星雲星団ガ..
by kem2017 at 21:40
> にゃあさん 設..
by supernova1987a at 02:22
> HIROPONさん ..
by supernova1987a at 23:13
もっと気軽に遊べるソフト..
by にゃあ at 23:01
> kem2017さん ..
by supernova1987a at 22:58
以前の記事
お気に入りブログ

タグ:画像処理 ( 44 ) タグの人気記事

ASI1600MC-COOLの謎⑦

★MMだけでなくMCも
リモコンの赤外信号を撮影してみて、ASI1600はMMだけでなくMCモデルもIRフィルタではなくARフィルタが装着されており、赤外線を透過しているらしいことが判明しました。また、オヤジさんご指摘の通り、最新マニュアルにはちゃんと「ARフィルタ装着仕様」である旨、明記されていましたね。

★昼間が良い天気だったので
ASI1600MC-COOLの『赤外線透過疑惑』が勃発してから、一度試してみたかったのが、赤外線による昼間の風景写真です。とくにカラースワップ法による赤外カラー写真を撮影することは近年の憧れだったので、わくわくしますねぇ。
・・・・で、やってみました♪

★ASI1600MC-COOLにニコンのレンズ
こんな感じで、フィルターを色々変えながらテスト撮影開始です。
f0346040_16172238.jpg
ちなみに、普通のデジカメ(クールピクスP7000)では、こんな感じに写る景色です。
f0346040_16181672.jpg
★ノーフィルタ(ARフィルタのみ)では
f0346040_16193293.jpg
※16bitFITSで出力したRAWデータをステライメージでデモザイク+2×2ビニングした後、モノクロ化
※ゲイン:139 ガンマ:50 色補正:B&Rともに50 (以下の写真も同様の設定)
ちなみに、どうも赤外線を拾っているらしくコントラストがよろしくありません。

★LPS-D1フィルタ併用だと
本来は、光害カット目的のLPS-D1フィルタですが、赤外線をカットする特性があるはずなので試してみました。
f0346040_16250293.jpg
木々が反射しているとおぼしき赤外線がきれいにカットされて、一気にコントラストが上がりました。(緑系の光害をカットする効果も寄与しているのかもしれませんが。)

★本命のR72フィルタでは
そして、『本命』のR72フィルタを試してみます。このフィルタ(ケンコー製)は720nm以上の波長のみを透過する仕様なので、可視光線の大半がカットされて赤外線が強調されます。さて、どうなりますか。
f0346040_16285771.jpg
おお!
これですよこれ!
「青空が真っ黒になって、日陰がストンと落ちて、日の当たる葉っぱが輝く」という、赤外線写真独特の描写。
なかなか良い感じです♪

こうしてみると、ノーフィルタのASI1600MC-COOLの画像は、ちょうどLPS-D1での画像とR72での画像のちょうど中間とも言えそうですね。

★そしていよいよ!
R72フィルタを使って撮影したRAW画像に『秘術』の限りを尽くして、幻想的な赤外カラー写真をゲットすることを試みます!

①ステライメージでデモザイク+ソフトウェアビニングしてRGBカラーTIFFに変換
②このままだとカラーの分離が悪いのでシルキーピクスのテイスト調整でベルビア風に変換
③赤外写真は解像度が低くてモヤモヤするのでシルキーピクスでナチュラルシャープ処理
④GIMP2でRチャンネルとBチャンネルをスワップ処理(チャンネル入れ替え)
⑤ステライメージでトーンカーブ修正
⑥シルキーピクスでHDR処理
⑦ステライメージでLab色彩調整処理
⑧ステライメージで画像を縮小してJPEG変換

すると・・・・!
f0346040_16383243.jpg
おおっ!
とっても良い感じ♪
一度は撮ってみたかった赤外カラー写真が簡単に撮影できてしまいました!

ASI1600MC-COOLで赤外線風景写真撮影、おすすめです。
(機材が大げさになっちゃうけど・・・・)

★結論

ASI1600MC-COOLは、赤外カラー写真撮影に使えます!!


by supernova1987a | 2016-10-10 16:44 | 機材 | Comments(8)

ASI1600MC-COOLの謎⑤


★ASI1600MC-COOLの謎、再燃

いやもうホント、けむけむさん はじめ 皆さんには「ごめんなさい」としか言いようが・・・・。

先日来、他のユーザーさんと協力して、色んな謎を解き明かしているのですが、そのなかで「解決済み」扱いした課題がありました。
「HighSpeedMode」の『謎』、です。
一応、マニュアルや本家のサイトなどを色々と調べてみて

「HighSpeedMode」は、高速データ転送を優先するために、ADCを12ビットから10ビットに落として撮影するモードである

と結論づけたのですが、なんとなく、
「え~?・・・ホントに階調が1/4にまで落ちているかぁ?」
という疑念があって・・・・こりゃ、早く真面目にテストしてみないと、けむけむさんの「力作マニュアル」に汚点を残すことになるではないか!
・・・というわけで、早速やってみた。


★同等の条件でサクッと比較するための簡易テスト

いつまで待っても晴れそうにないので、もう、室内撮影でデータ取ることにしました。
f0346040_00303813.jpg
ASI1600MC-COOLにニコンGレンズ→マイクロフォーサーズ変換アダプタを通して、マイクロニッコール60mmを装着。
モニタにグラデーションを表示して、これを撮像するという作戦。これなら、すぐにパラメータを変えられます。

なお、変なノイズの影響を極力排除するため、冷却+短時間露光の組み合わせで行きます。

<撮像データ>
Debayer Preview=Off
Output Format=Fits files (*.fits)
Binning=1
Capture Area=4656x3520
Colour Space=RAW16
Hardware Binning=Off
High Speed Mode= <ON /OFF> ←ここだけを変えて『対照実験』してみます
Turbo USB=80
Frame Rate Limit=Maximum
Gain=400
Exposure=0.0017
Timestamp Frames=Off
White Bal (B)=50 ← RGBの強度を補正せず、素のデータを取ります
White Bal (R)=50 ← RGBの強度を補正せず、素のデータを取ります
Brightness=1
Gamma=81
Temperature=-9.8
Target Temperature=-10
Cooler=On

<データ解析>
Delphiでコーディングした自前のFITS分析(というほどでもないけど)プログラムを使います。
もちろん「エンディアン」「FITSの規定」「補数表現」の三大モンスター(バグ)は退治済みです。

★輝度分布グラフの比較
<HighSpeedMode:OFF>
f0346040_01255409.jpg
すごい!前回出ていた『変な群』がほとんどない!!さすが冷却+短時間露光
カラーバランスの補正も切ったことになるので、RとBはほぼ一致。Gが高いのは想定内(画素数が他の色の2倍あるのでカウント数も2倍あって当たり前)。
さて、「ON」にすると・・・・

<HighSpeedMode:ON>
f0346040_01262366.jpg
なぬ?
あれれ?????
ほとんど何も変わらない!!

いや、あの・・・そんなハズは・・・・。
よし、生き残っているデータのビット数を推定するため、有効な階調数を解析してみる!

★輝度分布を超拡大してみる
先ほどの輝度分布データを超拡大して、輝度データの隙間がどう変わっているか見てみます
f0346040_01462853.jpg
うぐぅ・・・
こ、これは、『全く同じ』と言って良いのでは・・・・。
まるで同じ輝度値のところにカウントが来ています。

えーい。
ではでは、相関関係はどうなのだ?!


★輝度値とデータ間隔の相関比較

<HighSpeedMode:OFF>
f0346040_02035620.jpg
ああ、やっぱりノイズが少ないと、美しい相関が現れますね。恐らくはトーンのガンマ通りかと。

<HighSpeedMode:ON>
f0346040_02053007.jpg
げげっ・・・。

ま、全くもって同じ・・・です。
そ、・・・そんなハズは・・・・。
え・・と、ちょっと待って!

・・・ヒットしたピクセルがゼロのデータを削除して、残った輝度数を数えてみるのだっ!!

<HighSpeedMode:OFF>

データ数:4096個
 = 12ビット理論値ピッタリ

<HighSpeedMode:ON>

データ数:・・・4096個(えっ?)
 = 12ビット理論値ピッタリ(ええ~!)


・・・・ということは・・・・


★前言撤回(涙)
今回の検証実験の結果

16ビットFITSに出力する場合において、
HighSpeedModeパラメータはONでもOFFでも
『全く』差がないらしい

ことが検証・・・・されちゃいました。


ううう。じゃあ、・・・じゃあ、あの、マニュアルとかに書かれてた
「HighSpeedModeをONにするとADCは10ビットで駆動する」
とか
「スピードを優先しない場合は、OFFにすべし」
とか、の文言は一体なんだったんだ~???

ん?ひょっとして、これ、
8ビット出力の場合限定のお話だった、なんてオチじゃ・・・・・??

ともかく、皆様、お騒がせしてごめんなさい・・・でした。


★気を取り直して、別な『謎』に・・・・

次回は、『MMだけでなくMCも赤外線通すんじゃね?』疑惑、行ってみます。

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



by supernova1987a | 2016-10-05 05:36 | 天体写真 | Comments(2)

ASI1600MC-COOLの謎④

★ここまで長かったぁ

結局、「エンディアン形式」「FITSの書式」「補数表現」の3匹のモンスターと3週間ほど格闘していたことになりますが、おかげさまで、ようやくまともにASI1600MC-COOLのFITSファイルが読み出せるようになりました。
これで、いろんなパラメータを変えたときに、輝度分布がどうなっているのかとか、シグナルとノイズの見分け方はあるのかとか、色々遊べそうです。
ちなみに、RGBそれぞれの画像データを抜き取るルーチンも実装済みなので、その気になれば「自前RAW現像」できそうです。うひひ・・・・。


★おっと、その前に!!

色々と楽しむ前に、基本を固めておかないとダメでした。
ご承知のようにASI1600MC-COOLは、撮像したアナログデータを12ビットADCで量子化して、最終的に16ビットFITSを吐き出します。
ただし、格納できる輝度空間(明るさのレンジ・階調)が、(2^16)/(2^12)=16 となり 16ビットの16分の1しかありません。さてどのように記録されてるのでしょうか?
・・・・というわけで、やってみた♪


★G素子の輝度分布の「超」拡大

前回のトーンカーブを描いた元データからG1素子(GRBGグループに含まれる2個のGのうち片方)の輝度データを抜き出して、その一部を拡大表示させてみると
f0346040_22555668.jpg
はい。
こんな感じで輝度分布が『飛び飛び』になっているのが分かります。
理論的には、「16」離れた間隔でデータが散らばっていると想像できますが、本当にそうなのでしょうか?今度は少し別な角度から分析してみます。

★輝度間がどれだけ離れているか集計してみる

ヒットしたピクセル数がゼロの輝度値を削除して、「輝度間隔がいくらのデータが多いのか」「輝度と間隔との相関はあるのか」を視覚化してみます。
f0346040_00540946.jpg


※横軸は輝度値、縦軸は輝度間隔を示します。
たとえば、300という値の次が320ならば、間隔は20となりますので、座標(320,20)に1つ点が打たれます。
数値軸は、より広範囲について相関が見やすいように、両対数グラフにしてあります。

これを見ると、輝度が高くなればなるほど、間隔が狭くなっていることが分かります。高輝度データがサチったりトーンジャンプしないように、ガンマ値を調整したと考えればつじつまが合いますね。

ところが、「きれいな相関を示す群」(オレンジ囲い)の上下には「奇妙な分布を示す群」(ブルー囲い)が見られます。これは一体何なんでしょう??

別に根拠があるわけではありませんが、たいていこういったイレギュラーな分布を示すデータは『個人的に』ゴミデータだと思いたいのが心情。その正体がショットノイズなのか、ダークノイズなのか、はたまたリードノイズなのかは分かりませんが、12ビットADCからは『出るはずのない』値が吐き出されているのは間違いありませんねぇ。


★もっと細かく見てみます

実際に、等間隔であるべき狭い領域に、不自然に割り込んできたデータの実例をお見せします。
f0346040_23243887.jpg
表の黄色セルは、他の白いセルに1万個前後のピクセルがヒットしているというのに、たった1~2個のピクセルしか該当していません。どうも胡散臭いですね。右の方対数グラフでも、ほぼ等間隔に並んでいる上の群と異なり、下の群は異質です。
そういえば、前回のブログでお見せした輝度分布図の中に現れてきていた、「変なところにあるデータ」↓と同一なのではないかと推測。
f0346040_00493860.jpg

★あらたな謎も・・・・

もっと比較データを取らないと、はっきりしたことは言えませんが、今のところ暫定的結論として

<ASI1600MC-COOLのADCを12ビット駆動して16ビットFITS出力すると>

 ①16ビットの輝度空間に12ビット分の輝度データが分散配置される。
 ②分散配置される感覚は一定ではなく、輝度値と相関関係がある(ガンマ値次第?)
 ③想定される輝度値と異なる数値を示すピクセルが混じっている(ノイズの影響?)



★ではノイズが出そうにもない条件ならどうだ?

ASI1600MC-COOLは元々ノイズが少ないので、冷却した上に超短時間露光ならノイズの影響はほとんど受けないと思われます。

・・・・で、やってみた。
f0346040_00303813.jpg
ディスプレイに映し出したグラデーションをASI1600MC-COOLで撮影して分析する・・・という・・・。

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


by supernova1987a | 2016-10-04 07:18 | 天体写真 | Comments(2)

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追記 確かに赤外線に感光する事を確かめました
※2017.10.16追記:現在、主要な販売店さんのサイトでも「MCはARフィルタ仕様である」と明記されています.



★「開発ごっこ」の方は・・・
ついに素の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)


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