あぷらなーと


あぷらなーとの写真ブログ
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 31
あぷらなーと
「自然写真大好き」
HNあぷらなーと が

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

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

生息地:香川・徳島
カテゴリ
最新のコメント
> Gさん 安物断..
by supernova1987a at 00:21
> オヤジさん さ..
by supernova1987a at 00:17
> kem2017さん ..
by supernova1987a at 23:56
> にゃあさん 今..
by supernova1987a at 23:55
今年我が家の庭では蝉の鳴..
by G at 10:56
あぷらなーとさんの建築物..
by オヤジ at 10:47
既にクマゼミは圧倒的な戦..
by kem2017 at 09:49
温度と湿度管理大事なんで..
by にゃあ at 09:27
> にゃあさん ミ..
by supernova1987a at 21:55
> オヤジさん な..
by supernova1987a at 21:38
以前の記事
お気に入りブログ

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

★前回では・・・
天体画像に見立ててExcelに手書きした絵をベイヤー画像に変換するところまでできました。
f0346040_00315872.jpg
★ベイヤーデータを各画素に割り振ります
ベイヤー配列に記録された輝度データをRGB各画素の配列に割り振ってみます。
これはもう、コーディングの必要がありませんね。そのまま各画素のセルから参照させるだけです(笑)
(こういう手抜きをするためにExcelを選んだわけでして・・・・。)
f0346040_00443947.jpg
ちなみに、各画素の様子を見るために、次のようなコードで視覚化してみます。
-------------------------------------
'///////////////R画素データのイメージ化処理/////////////
X0 = 4
Y0 = 94
Yshift = 94 - 49 'ベイヤーR画素データセルとのシフト量
For I = 1 To 40
X = X0 + I
For J = 1 To 40
Y = Y0 + J
R = Cells(Y - Yshift, X).Value
Cells(Y, X).Select
With Selection.Interior
.Color = RGB(R, 0, 0)
.Pattern = xlSolid
End With
Next
Next

'///////////////G画素データのイメージ化処理/////////////
X0 = 47
Y0 = 94
Yshift = 94 - 49 'ベイヤーG画素データセルとのシフト量
For I = 1 To 40
X = X0 + I
For J = 1 To 40
Y = Y0 + J
G = Cells(Y - Yshift, X).Value
Cells(Y, X).Select
With Selection.Interior
.Color = RGB(0, G, 0)
.Pattern = xlSolid
End With
Next
Next

'///////////////B画素データのイメージ化処理/////////////
X0 = 90
Y0 = 94
Yshift = 94 - 49 'ベイヤーB画素データセルとのシフト量
For I = 1 To 40
X = X0 + I
For J = 1 To 40
Y = Y0 + J
B = Cells(Y - Yshift, X).Value
Cells(Y, X).Select
With Selection.Interior
.Color = RGB(0, 0, B)
.Pattern = xlSolid
End With
Next
Next
--------------------------------------
ああ、何の工夫も無いベタなコード・・・・。ま、動けば良いんです。リハビリですから。
f0346040_00481969.jpg
はい。各画素を通すとどのような画像が見えているのかが演算できました。

★デモザイクの準備
RAWデータを現像するときには上記のようなデータを元にカラー画像に変換しているわけですが、このままではマズいですね。RGBどの画素も「スカスカ」なので、その隙間を補完してやる必要があります。補完処理はコードを書かずにEXCELそのままで行くと楽ちんです。
f0346040_00593418.jpg
RGB全ての画素に共通した処理として、周りを4つの有効画素に囲まれている位置(★マーク)には、周りの4つの平均値を代入してみました。(たぶんコレは正解)
Gデータはこれで全ての隙間が埋まることになります。ただしRとBは画素数がGの半分しか無いので、周りに2つの有効セルしか無い部分(○と△)には上下もしくは左右に隣接する2つのセルの平均値を代入してみました(これが実際の処理かどうかは自信がありません)。

さらに補完したデータを視覚化するコード(参照先が変わるだけで補完前の表示コードと同じ物)を通せば・・・
f0346040_01050975.jpg
各色とも滑らかな画像に変わりました。
ちなみに40×40のマトリクスのうち外周部分がグレーになっているのは、隣接するセルが足りず補完が不可能なエリアだからです。
そういえば、ASI1600MC-COOLと同じ撮像チップを搭載しているオリンパスの某デジタル一眼レフでは、総画素数1685万画素で有効画素数1628万画素と公称されていますが、この減少分が外周部分だと言うわけでしょうね。

★いよいよRGBデータを合成します
ここまでできると、あとは簡単ですね。補完演算した各セルの値をRGBの輝度と見なして表示させるコードを書きます。
---------------------------------
'///////////////デモザイク処理イメージ表示処理/////////////
X0 = 90
Y0 = 229
RYshift = 229 - 139 'ベイヤーR画素補完演算セルとの行シフト量
RXshift = 90 - 4 'ベイヤーR画素補完演算セルとの列シフト量
GYshift = 229 - 139 'ベイヤーG画素補完演算セルとの行シフト量
GXshift = 90 - 47 'ベイヤーG画素補完演算セルとの列シフト量
BYshift = 229 - 139 'ベイヤーB画素補完演算セルとの行シフト量
BXshift = 90 - 90 'ベイヤーB画素補完演算セルとの列シフト量
For I = 2 To 39 '左端と右端は処理から外す
X = X0 + I
For J = 2 To 39 '上端と下端は処理から外す
Y = Y0 + J
R = Cells(Y - RYshift, X - RXshift).Value
G = Cells(Y - GYshift, X - GXshift).Value
B = Cells(Y - BYshift, X - BXshift).Value
Cells(Y, X).Select
With Selection.Interior
.Color = RGB(R, G, B)
.Pattern = xlSolid
End With
Next
Next
------------------------------
・・・と、こんな感じでしょうか。
f0346040_01163334.jpg
ベイヤーデータのデモザイク処理が完成しました♪

★結論
いや、実際どうでも良いことなんですが、結局
f0346040_00094342.jpg
こんな元画像をASI1600MC-COOLのようなGRBG型ベイヤー素子で撮影すると、上記のようなRGB画像が得られることがシミュレートできました。
・・・やっぱり2×2ピクセルくらいの星像を入射させても、デモザイクの原理から言ってローパスフィルターなしでは偽色が発生するのは仕方ありませんね。
また、相当に解像度が低下していますが、これもベイヤー素子の宿命でしょう。

★というわけで
「なんちゃってベイヤー現像シミュレータ」
EXCELだけで完成しました。根幹ができるとあとは楽なので、ここにノイズ付加機能やらビニング機能やらを書き加えていけば色々とロジックの検証ができます。

・・・・・ああ、こんな簡単な処理に大汗かいてしまった。
・・・正直、13年前に戻りたいです(涙)。


by supernova1987a | 2016-09-08 00:37 | 天体写真 | Comments(2)
Commented by けむけむ at 2016-09-08 04:55 x
ははぁ、こんな具合になってるんですかぁ
派手派手盛り盛りだとさらに強調やら削ったりやらやりたい放題なので原型を止めないのも当たり前ですねぇ (^o^;

ループのカウンタってみんなIやJですよね... FORTRANの名残ですかねぇ...

Delphi ものすごく高くて starterが廉価版らしいですが、かなり制限があるらしいです。
Commented by supernova1987a at 2016-09-08 07:18
> けむけむさん
はっ。無意識にiとかjとか使ってますが、そういえば学生時代は「i、j、k、l、m、nから始まる変数は暗黙のインテジャー型」なんていう指導を受けたように記憶しているので、私個人に関してはその影響です。FORTRAN77病ですね。Delphi、値段見てビックリ。昔よりお高いですねぇ。まさか1600万画素の演算をExcelにさせる訳にはいかないので、手持ちのコンパイラを復活させるかフリーのコンパイラを物色しないとダメですね。
名前
URL
削除用パスワード
<< 晴れない夜は基本の復習④ 晴れない夜は基本の復習② >>


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