ほしぞloveログ

天体観測始めました。

タグ:星像

以前、星像切り出し用のコードをPythonで書いたのですが、




Matlab用に少し書き直したので公開します。結果はすでにここ最近の記事で使っているので、これまでに見ている方も多いかと思います。デザインはピンとくる方もいるかと思いますが、スターベース東京のブログの作例の切り出し画像のフォーマットに合わせてあります。

ファイル選択ですが、以前選んだフォルダを覚えるようにしました。以下のページを参考にしました。ありがとうございました。
前回の対応フォーマットはJPEGだけでしたが、今回はMatlabのimreadコマンドでサポートする画像ファイルに対応しています。なので、かなりのフォーマットに対応するはずです。実際に全部試したわけではないので分かりませんが、
  • BMP、JPEG、PNG、CUR、JPEG 2000、PPM、GIF、PBM、RAS、HDF4、PCX、TIFF、ICO、PGM、XWD

に対応するらしいです。天文で関連するのは主にJPG, PNG, TIFFくらいでしょうか。RAWファイルはあまり対応できないのですが、個別にFITS形式だけ対応させておきました。

カラーの8bit、16bitに対応しています。32bitには対応していません。あと、グレー画像は多分ダメです。結果はファイル名に”_cut25”というのが足されて、元のファイル形式と同じ形式(例えばjpgならjpg、tifならtif)に書き出されます。


7bc22bb9_cut


あまり綺麗でないですが、ソースコードです。 コピペして、Matlab上で走らせてみてください。上のような画像が出てくるはずです。簡単なコードなので、各自で希望に応じて適当に書き換えてみてください。3x3マスとかも簡単にできるはずです。

clear; %%% Paramters CS = 300; BW = 5; % File select if ispref('MyPreferences','LastUigetfileFolder') folder = getpref('MyPreferences','LastUigetfileFolder'); if ~ischar(folder) folder = '/Users/'; % for mac. if windows use 'C:\'. end else folder = '/Users/'; % for mac. if windows use 'C:\'. end [file,path] = uigetfile({ '*.*', 'All files(*.*)'}, 'Pick a file','MultiSelect', 'on',folder); if ~isnumeric(path) setpref('MyPreferences','LastUigetfileFolder',path) end % Reading image with size and class (full size) [filepath,name,ext] = fileparts(file); if extractBefore(ext,5) == '.fit' Img = fitsread(fullfile(path, file)); else Img(:,:,:) = imread(fullfile(path, file)); end [y, x, l] = size(Img); if isa(Img,'uint16') cv = 256; else cv = 1; end % Size of ASP-C ay = round(size(Img,1)/1.6); ax = round(size(Img,2)/1.6); % empty cut image CutImg = zeros(5*CS+6*BW, 5*CS+6*BW, 3, class(Img)); % Orange area CutImg(:,:,1) = 235 *cv; CutImg(:,:,2) = 170 *cv; CutImg(:,:,3) = 80 *cv; % Blue Area BA = CS+BW+1:4*CS+5*BW; CutImg(BA,BA,1) = 50 *cv; CutImg(BA,BA,2) = 50 *cv; CutImg(BA,BA,3) = 80 *cv; % Define areas in cut image C = zeros(CS,5); for i = 1:5 C(:,i) = (i-1)*CS+i*BW+1:i*(CS+BW); end % Area in original image IX(:,1) = 1:CS; IX(:,2) = round((x-ax)/2)+1:round((x-ax)/2)+CS; IX(:,3) = round((x-CS)/2)+1:round((x+CS)/2); IX(:,4) = round((x+ax)/2)+1:round((x+ax)/2)+CS; IX(:,5) = x-CS+1:x; IY(:,1) = 1:CS; IY(:,2) = round((y-ay)/2)+1:round((y-ay)/2)+CS; IY(:,3) = round((y-CS)/2)+1:round((y+CS)/2); IY(:,4) = round((y+ay)/2)+1:round((y+ay)/2)+CS; IY(:,5) = y-CS+1:y; % Filling cut image by original cut for i = 1:5 for j = 1:5 if ( ((j==1)||(j==5)) && ((i==2)||(i==4)) ) || ( ((j==2)||(j==4)) && ((i==1)||(i==5)) ) CutImg(C(:,i),C(:,j),:) = 256 *cv; % fill with white else CutImg(C(:,i),C(:,j),:) = Img(IY(:,j),IX(:,i),:); end end end %image(CutImg); if extractBefore(ext,5) == '.fit' fitswrite (CutImg, fullfile(path, [name,'_cut25',ext])); else imwrite (CutImg, fullfile(path, [name,'_cut25',ext])); end




途中からいろいろ簡略化しているのでわかりにくいと思います。% Define areas in cut image以降を、以下のコードに置き換えるとまだわかりやすいかと思います。

% Define areas in cut image C1 = 0*CS+1*BW+1:1*CS+1*BW; C2 = 1*CS+2*BW+1:2*CS+2*BW; C3 = 2*CS+3*BW+1:3*CS+3*BW; C4 = 3*CS+4*BW+1:4*CS+4*BW; C5 = 4*CS+5*BW+1:5*CS+5*BW; % Area in original image IX1 = 1:CS; IX2 = round((x-ax)/2)+1:round((x-ax)/2)+CS; IX3 = round((x-CS)/2)+1:round((x+CS)/2); IX4 = round((x+ax)/2)+1:round((x+ax)/2)+CS; IX5 = x-CS+1:x; IY1 = 1:CS; IY2 = round((y-ay)/2)+1:round((y-ay)/2)+CS; IY3 = round((y-CS)/2)+1:round((y+CS)/2); IY4 = round((y+ay)/2)+1:round((y+ay)/2)+CS; IY5 = y-CS+1:y; % Filling cut image by original cut CutImg(C1,C1,:) = Img(IY1,IX1,:); CutImg(C2,C1,:) = 256 *cv; CutImg(C3,C1,:) = Img(IY3,IX1,:); CutImg(C4,C1,:) = 256 *cv; CutImg(C5,C1,:) = Img(IY5,IX1,:); CutImg(C1,C2,:) = 256 *cv; CutImg(C2,C2,:) = Img(IY2,IX2,:); CutImg(C3,C2,:) = Img(IY3,IX2,:); CutImg(C4,C2,:) = Img(IY4,IX2,:); CutImg(C5,C2,:) = 256 *cv; CutImg(C1,C3,:) = Img(IY1,IX3,:); CutImg(C2,C3,:) = Img(IY2,IX3,:); CutImg(C3,C3,:) = Img(IY3,IX3,:); CutImg(C4,C3,:) = Img(IY4,IX3,:); CutImg(C5,C3,:) = Img(IY5,IX3,:); CutImg(C1,C4,:) = 256 *cv; CutImg(C2,C4,:) = Img(IY2,IX4,:); CutImg(C3,C4,:) = Img(IY3,IX4,:); CutImg(C4,C4,:) = Img(IY4,IX4,:); CutImg(C5,C4,:) = 256 *cv; CutImg(C1,C5,:) = Img(IY1,IX5,:); CutImg(C2,C5,:) = 256 *cv; CutImg(C3,C5,:) = Img(IY3,IX5,:); CutImg(C4,C5,:) = 256 *cv; CutImg(C5,C5,:) = Img(IY5,IX5,:);







2017/3/11、休日の前日で晴れ。今晩は満月直前なので、星雲の撮影などはできそうもありませんが、せっかくの星空が勿体無いので何をしようか考えていました。やりたいこと、やらなければならないことはたくさんあるのですが、あくまで趣味なのでやりたいことをやろうと思い、気になっている星像の流れの原因を突き止めることにしました。

先日のマルカリアン銀河鎖の撮影の際、Advanced VXとPHD2でガイドをしているにもかかわらず星像が一定方向に流れるという問題があったのですが、やっと原因が判明しました。犯人はガイドの焦点距離を伸ばそうとして、ついこの間導入したCanonのZOOM LENS EF 55-200mmです。ガイドとして使っているCCD、ASI224MCにアダプタを介してレンズを取り付けているため、電動系は全く無意味で、当然ピントなどはマニュアル、というか手でレンズの先の筒をひねって伸ばしたりして合わせるのですが、その際すごく軽くて弱そうだなと思っていました。レンズの筒の部分にちょっと触るとCCDでの映像があからさまに揺れるのです。まあガイド中は触らないからいいかと思っていたのですが、これが間違いでした。

よくよくレンズを見てみると、ズームタイプでULTRASONICとか書いています。Webで調べたら、超音波モーターを使っているとのことです。静音でいいらしいのですが、パワーがなさそうなのは容易に想像できます。駆動力がないということは、動かす対象は軽くて、構造的に弱いものにならざるを得ないということでしょうか。四千円程度と安くてよかったのですが、天体用には向かないということがよくわかりました。


検証

今回の検証のためにやったことを書いておきます。まずは前回の再現。できる限り同じ機材、同じ環境で星像が流れるかを確認します。バラ星雲あたりとスピカあたりで試しましたが、見事に流れます。

使っている機材は撮影条件によらず共通のものが
  • 鏡筒: FS-60Q (f=600mm)
  • 赤道儀: Advanced VX
  • カメラ: EOS 60D
  • ガイド用CCD: ASI224MC
  • ガイドソフト: PHD2

変えている撮影条件は
となります。

1. 最初はバラ星雲あたりを、CanonのZOOM LENS EF 55-200mmを使いPHD2でAVXの2軸に返しました。5分露光で5枚、22時39分29秒から23時05分8秒まで25分39秒かけて撮った画像を比較明合成します。比較明合成はstarstax (紹介記事本家) というソフトを使いました。5分 x 5枚の25分より長くなっている理由は毎撮影時にBackyardEOSでPC側にダウンロードしているために、その間は撮影できないからです。

rosse_canon_2axis

左右が赤経方向、上下が赤緯方向に相当するので、どうも赤径方向に大きく流れているようです。

流れた距離をPhotoshopの定規ツール(スポイトツールに隠れています)で測定すると19.06pixelありました。

IMG_1270


EOS 60Dはセンサーサイズが22.7mm x 15.1mmなので、600mmの焦点距離だと画角は2.167 x 1.441度になります。これが5184 x 3456pixelの画像になるので、1pixelあたり0.0004181度になります。秒角に直すと1.505秒/pixelとなります。なので星像が流れた距離を角度で表すと

19.06pixel x 1.505秒/pixel = 28.69秒

となります。これを25分39秒、すなわち1539秒かけて撮影しているので、移動速度は

28.69秒角 / 1539秒 = 0.01864秒角/秒 = 1.119秒角/分 = 67.11秒角/時

となります。1分で1秒以上もずれたら、数分で流れが見えるようになるのも当たり前です。


2. 同じくバラ星雲あたりを、CanonのZOOM LENS EF 55-200mmを使いPHD2で今度は赤緯のフィードバックをなくし、赤経の1軸のみに返しました。

rosse_canon_1axis

同じく5分露光が5枚で、23時6分14秒から23時31分56秒の25分41秒です。先ほどの赤経方向の動きに、さらに赤緯の方向にずれが加わっているように見えます。これは極軸の精度が悪かったために加わったと考えられます。

移動距離は22.94pixelなので、速度は1.347秒角/分となり、少し速度が増しています。これは赤緯方向のずれが加わったからでしょうか。


3. もう少し時間が経って、バラ星雲がかなり西の低い高度に移動した時の速的です。2軸に返しているだけで上と条件は同じです。5分露光3枚で、0時6分13秒から0時21分36秒の15分23秒です。

rosse_canon_2axis_West

同様に測定すると、58.82pixelとなり、約15分でこの距離なので速度は相当速くなり、5.75秒角/分となりました。やはり方向は赤経方向が主です。CCDに付いているレンズがほぼ水平になり、赤経方向に重力がかかり非常にたわみやすい状況でした。


4.  ここでバラ星雲が沈んでいったので、次はスピカ近辺で試して見ました。レンズは同等で、2軸制御です。1時38分29秒から1時59分45秒の21分16秒です。

spica_canon_2axis

測定すると、距離は27.93pixelとなり、1.976秒角/分となりました。ちょっと速いですが、場所を移動しても再現性はありそうです。


いずれにせよ2軸制御をしているときは基本的にほぼ赤経の方向のみの流れです。ガイドのCCDの像とカメラで撮影している像が、なんらかの理由で赤経方向に相対的にずれることにより、星像が赤経方向に流れているということです。


5. ここでレンズが怪しいと睨み、以前使っていたCマウントの50mm、f=1.4の軽くて短いレンズに交換しました。実はレンズを交換する前に赤系も止めてフィードバックなしで撮影してしまおうとしたのですが、Advanced VXはピリオディックモーションが+/-15秒程度あることが実測で分かっているので、ちょうど今のずれとコンパラなオーダーなので混乱してしまうと思い、先にレンズを代えることにしました。この読みは正解で、星像の流れがぴったりと止まりました

2軸制御で、2時6分50秒から2時32分35秒の25分45秒です。

spica_50mm_2axis


流れる距離が短すぎるので誤差も大きいですが、とりあえず2.14pixelと計測しました。速度はなんと0.125秒角/分となり、星像が流れる量は10分の1位になったということです。

しかも、明るいレンズのせいなのかと思いますが、PHD2のカメラのゲイン設定をデフォルトの95%から60%くらいまで下げと、カメラからのノイズが減って背景がすごく安定し、位置を読み取る時のピークの山の形がほとんど変形せずきれいになるので、位置精度が上がるためでしょう、ピクセルあたりの精度が余裕でRMSで0.2ピクセルを切っています。200mmの時の精度が適当なときは0.35-0.4ピクセル、すごく頑張って0.25ピクセル程度なので平均だとピクセルあたりで倍近くいいです。角度で表すと、2.5秒くらいまでいく(200mmの場合は1秒ちょっとくらい)ので、レンズの焦点距離の4倍の違い程の差は出ずに、実質2倍くらいの差しかありません。星像の流れは比べるまでもなく50mmのほうがいいので、しばらくは50mmでもう少しパラメータを詰めていくことにします。


さて、ここで一つ疑問が湧きました。なぜ星像の流れは赤経方向ばっかり出たのかということです。

1. まずレンズ自身が弱くてたわんだと仮定します。レンズは円筒形なので、円柱の軸に対しては円対称で、たわみは円柱軸の回転方向に依らないはずなので、星像の流れの方向は鏡筒の向きが変われば変わるはずです。なので赤緯方向に出てもおかしくありません。

2. 一方、これまではレンズが大きくて重いから、レンズやCCDを支えている根元の機械的な構造の強度が十分でなくたわんだと仮定します。構造的に赤経方向の固定方法が何かしら弱いとすれば、赤経方向のみに流れが出たというのは納得できます。

実際には赤経方向のみに流れが出ているので、一見2が正しいように思えます。ですがもし2が正しいとすると、50mmのレンズに変えた場合にずれの量は2つのレンズのモーメント比くらいでしか改善されないはずです。200mmのレンズは図体は大きいけれど密度が低いので、重さは50mmのレンズと大して変わりません。長さは200mmの方が倍くらいあるので、モーメント比はたかだか2倍です。ということは50mmのレンズに変えたとしてもずれの量は半分くらいにしかならないはずですが、実測では10分の1と圧倒的にずれは小さくなっています。

しばらく悩んだのですが、色々考えてやっと分かったのは、実は赤道儀に載せて南の空に鏡筒を向けると、いつも鏡筒が長手軸方向を中心に90度傾いた状態になるということです。これは実際にやってみるとすぐにわかるのですが、鏡筒が極軸方向を向いているホームポジションでは、長手軸方向の回転で考えた時に水平になりますが、南方向では地面の下を見ない限り、水平にはなりません。ベテランの方には当たり前のことなのかもしれませんが、少なくとも私は今回初めて気づきました。そのために重力は常に赤経方向に働き、レンズはいつも赤経方向にたわむというわけで、1のレンズ自身がたわんだと考えて矛盾しないのです。


もう一つ気になったのはPHD2のカメラのゲインがどうも自動で変わっているようなのです。これはスピカを画角に入れた時に気付いたのですが、明らかに背景が真っ暗になります。どこにもオートゲインの切り替えの設定場所はないので、というかゲインは任意に変えることができるので固定のはずなのですが、これはバグなのでしょうか?


いろいろ進んだり後退したりして回り道をしていますが、PHD2の理解がだいぶん進んできたのはもうけものです。なんとなくですがSWATでの撮影も見込みが出そうな気がしてきました。

 

このページのトップヘ