プレイ日記
moh6an moh6an
「高度サウンドユニットを使用した画像処理」研究会
22そうだね
プレイ済み
返信[1]
親投稿
moh6an moh6an
このトピックは「高度サウンドユニット(以下SU)」を使用した 画像処理の高速化手法について研究します。 ・主に配列計算命令「ARYOP」を使用 配列の計算速度が(一説には)80倍高速化するらしい 具体的なソース・概念の募集 ・GRP画面あるいは画像配列からの任意位置矩形の切り出し、結合 ・色指定配列からのRGB分離、分離配列からの結合 ・画像処理におけるARYOPの利用 ・ARYOP以外のSU命令利用の模索 ・高速化を妨げる要素 etc…
1そうだね
プレイ済み
返信[2]
親投稿
moh6an moh6an
外部URLは何故か消される可能性が高いので 関連トピックも募集します すえさん、SUを使用したペイントソフト https://miiverse.nintendo.net/posts/AYMHAAACAAADVHlKIfIOJA
1そうだね
プレイ済み
返信[3]
親投稿
かおなし SYO-YU-KOTO
と、トピック…?
0そうだね
プレイ済み
返信[4]
親投稿
moh6an moh6an
こまかいことをおきになさらずに、大局観も大事 (言い訳)
1そうだね
プレイ済み
返信[5]
親投稿
moh6an moh6an
ARYOPの動作 入力と出力は同じでも動作するみたい
0そうだね
プレイ済み
返信[6]
親投稿
だにえる haru2016nen
米の娘
0そうだね
プレイ済み
返信[7]
親投稿
SilverBlue Corei72630QM
米の子
0そうだね
プレイ済み
返信[8]
親投稿
moh6an moh6an
BIGのコミュから誰か誘導してくれませんかね、トピ建て希望
0そうだね
プレイ済み
返信[9]
親投稿
持っていないがコシヒカリ
0そうだね
プレイ済み
返信[10]
親投稿
画像配列同士のコピペは二次元配列のコピー命令作ってそれをそのまま使ってたなぁ…… その時はループ内でCOPYしまくっただけだったけど とりあえず自分も何か出来ないかやってみる
2そうだね
プレイ済み
返信[11]
親投稿
moh6an moh6an
ARYOP無理っぽいので 配列から矩形切り出しは画面の通り
1そうだね
プレイ済み
返信[12]
親投稿
moh6an moh6an
合成処理、 普通はピクセル単位で (α値*描画色)+((1-α値)*地色)/最大α値 なのをARYOPに落とし込むと以下画像
0そうだね
プレイ済み
返信[13]
親投稿
まだテストしていませんが 切り出しする範囲を微妙にずらして 4方向か8方向の画像データを確保してブレンドさせれば 高速なぼかしが可能なはずですし 応用で大きなサイズの指筆ブラシもSUで行けるはずです
2そうだね
プレイ済み
返信[14]
親投稿
moh6an moh6an
動作はしたけど速くならなかったので切ない
0そうだね
プレイ済み
返信[15]
親投稿
NAGI KOUCHA_PAN
#AOPLIP 線形補間が使えないですかね
1そうだね
プレイ済み
返信[16]
親投稿
moh6an moh6an
合成には使えそうな・・感じはするのだけど、自分のイメージが追いつかず・・・・
0そうだね
プレイ済み
返信[17]
親投稿
NAGI KOUCHA_PAN
地色を最大α値で#AOPDIVしてから描画色と#AOPLIPすればいいと思う
2そうだね
プレイ済み
返信[18]
親投稿
moh6an moh6an
とりあえずやってみます・・・
2そうだね
プレイ済み
返信[19]
親投稿
画像をずらす場合、切り出す範囲そのものを移動させるよりも、元々の画像配列のコピーを作るときのオフセット値を変えて作った方が速いみたいですね。 画像サイズが大きくなるほど差は無くなってくるから重要かは微妙ですが。
2そうだね
プレイ済み
返信[20]
親投稿
moh6an moh6an
あー、コピー先配列サイズをその分大きくしといてcopyするのか、なるほど
0そうだね
プレイ済み
返信[21]
親投稿
すぎのは SUGINOHA
色指定配列からのRGB分離、分離配列からの結合 ↑これやってみました。 公開キー「DSC4W3LJ」 3DS初代で2511ms WiiUで395ms
2そうだね
未プレイ
返信[22]
親投稿
すう SU-KUN
GSAVEでは、なぜか任意の位置の切り取りが出来ないので(機能の付け忘れ?)、最初からメモリ上の配列ではなくグラフィックバッファにデータを持たせ、GCOPY一回で右上にコピーし、GSAVEして配列に取り込んだ方が早いと思います。 それから、ARYOPは中身の演算速度はとても早く、極端に考えれば、配列の大きさにはあまり影響せず、ほぼ1瞬で終わる、ただし、呼び出し時のオーバーヘッドが多いため、できるだけ回数は少なく、1回で処理するデータは多くするのが高速化に繋がると思います。 あと、検証してないですが、配列を矩形で切り取る場合に、1次元配列で、Y方向は画像幅で固定して、画像幅x必要な縦幅と言う感じに、多めにCOPYのオフセットで切り取ると、一回のCOPYでできるので高速化できるかもしれません。 あ、FOR NEXTが遅いので、REPEAT UNTILに置き換えたりするのもわずかに有効かと
2そうだね
プレイ済み
返信[23]
親投稿
すう SU-KUN
XとY間違えた気がする…
0そうだね
プレイ済み
返信[24]
親投稿
moh6an moh6an
みっくさん、ソースありがとうございます、コード読んでみます。 すうさん、Y幅同列copyならRINGCOPYも使えそうな気がします、これも検証対象ですね。
1そうだね
プレイ済み
返信[25]
親投稿
XとYは多分逆ですね。X軸を変えた場合、保存した画像配列の幅と一致しなくなって、ずれてしまうはずなので。
1そうだね
プレイ済み
返信[26]
親投稿
×画像配列の幅 ○画像配列のX幅 幅だけだと配列全体の長さだと捉えてしまいますね……すみません。
1そうだね
プレイ済み
返信[27]
親投稿
Ϊċăņ ďо įт hikahikaru3
こめのこ
0そうだね
未プレイ
返信[28]
親投稿
moh6an moh6an
みっくさんのやり方、透明フラグ抽出だと 元配列=C ワーク配列=w 1:下位対象ビットnを2^n除算→2^n乗算、でビットシフトによるビット削除=w1 2:ワーク配列w1-元配列c=w2、で対象ビットより下位ビットが残る 3:最後に-1を乗算して正の数にするCA 青ビット(5bit) 1,2、3がAと同じ、出力がw3 4:w3からCAを引く、出力がw4 5:w4から下位不要ビットシフトのために2^n除算、出力CB
1そうだね
プレイ済み
返信[29]
親投稿
すぎのは SUGINOHA
そんな感じです。BIGで作って3DSで動作確認をしたらout of memoryになったのでwork変数は極力なくしました。そのためループごとに作り直しています。 ARYOPに#AOPANDがないので苦労しました。 ビット演算は高等なパズルの領域なので倍以上速くできる人がいるかも。 画像配列の物理コードでAが最下位ビットだったのがハマった所です。 おちゃめさんの入門講座の「グラフィック表示をしよう」がとても参考になりました。感謝です。 抽出してグラフィック画面で使うならば、講座の中で作られているPTOL関数が役立つと思います。
2そうだね
未プレイ
返信[30]
親投稿
moh6an moh6an
非常に雑なビット演算の基礎知識でも書いておく ・1ビットシフトをすると値が2倍、あるいは二分の一になる ・これを転じて、#AOPMULとか#AOPDIVでn乗を演算するとビットシフトn ・各ビットを足し合わせるという意味は、nビット乗で倍数をそれぞれの要素ビットで足し合わせることと同じ ・プチコン3号のGRPピクセルははRGB各5bit+透明フラグ1bitでRRRRRGGGGGBBBBBAの16bit長で並んでいるのを読み出している
1そうだね
プレイ済み
返信[31]
親投稿
NAGI KOUCHA_PAN
FFTを使うと高度なエフェクトを高速に処理出来るらしい
0そうだね
プレイ済み
返信[32]
親投稿
moh6an moh6an
ぼかし処理に使われるようです>FFT
1そうだね
プレイ済み
返信[33]
親投稿
moh6an moh6an
うえこうさんおひさ(;´Д`)
2そうだね
プレイ済み
返信[34]
親投稿
FFTで配列の中身を波形の成分に分解して、その中でデータに対する影響の小さいものを除けば正味のデータ量が減る。 ってのを聞いたことありますけど、実際にはまだ使いこなせてねぇです……
1そうだね
プレイ済み
返信[35]
親投稿
moh6an moh6an
>ビニールぶくろのそらさん 情報ありがとうございます、プチコンでの実装例問わず、画像処理につかえそうな情報お待ちしております。
1そうだね
プレイ済み
返信[36]
親投稿
NAGI KOUCHA_PAN
JPEGにはFFTが使われてるんじゃなかったかな
0そうだね
プレイ済み
返信[37]
親投稿
moh6an moh6an
>なぎさん ほいほい、jpegにも使われているんですね。なるほど
1そうだね
プレイ済み
返信[38]
親投稿
moh6an moh6an
追加情報: システム変数 EXTFEATUREが1の時高度サウンドユニット有効 0のとき無効です
3そうだね
プレイ済み
返信[39]
親投稿
SilverBlue Corei72630QM
JPEGで高周波帯域だけ抜け落ちるのはFFTを使っているからなのか…。
1そうだね
プレイ済み
返信[40]
親投稿
moh6an moh6an
EXTFREATUREはみなつさん提供情報>謝々
1そうだね
プレイ済み
返信[41]
親投稿
みなつ tksm372
EXTFEATUREの件は、yosさんにご協力いただきました(≧∇≦)b
0そうだね
プレイ済み
返信[42]
親投稿
moh6an moh6an
みなつさんありがとうございます。
1そうだね
プレイ済み
返信[43]
親投稿
moh6an moh6an
プチコンBIGコミュニティーにも同名トピを立てました 並行して参照をお願いします。 質問に対してトピをまたがった回答は当然ですがご遠慮くださいm(__)m https://miiverse.nintendo.net/posts/AYMHAAADAAB2V0f8HeXkcA
1そうだね
プレイ済み
返信[44]
親投稿
MIKI ifconfig
FFT は現実の配列をあの世送りし、 IFFT はあの世の配列をこの世に連れ戻す操作だと思ってください。 画像でも音でも、FFT使ってフィルタを適用する方法は以下の通り。 1. 入力配列を FFT する(あの世送りする) 2. フィルタ係数配列をFFTする(あの世送りする) 3. 1であの世送りされた配列と、2であの世送りされた配列を、要素ごとに掛け算する(結果はやはりあの世の配列) 4. 3で計算したあの世の配列を IFFT でこの世に連れ戻します。 5. 4の結果の実部が「入力にフィルタを適用した配列」になります。 この処理は 1. 入力画像配列とフィルタ係数配列を畳み込みする。 と同じ結果が得られます。
2そうだね
プレイ済み
返信[45]
親投稿
MIKI ifconfig
畳み込みについては https://miiverse.nintendo.net/posts/AYIHAAAEAACHVRTy0JHQEA 参照。 FFTによるフィルタ処理は https://miiverse.nintendo.net/posts/AYIHAAAEAACHVRTpFsukXg 参照。最後の公開キーはまだ有効です。
1そうだね
プレイ済み
返信[46]
親投稿
moh6an moh6an
MIKIさん、ありがとうございます 思いの外、広範囲にネタが集まっているのでびっくりです みなさんどうもありがとうございます。m(__)m
0そうだね
プレイ済み
返信[47]
親投稿
こちらの書き込みをみて ちょっと興味を持ったのでテストしてみました 公開キー "P3XK3546" VSYNCの代わりに使えて GRP1~最大GRP5の画像を 高度サウンドユニットを使って GRP0へ特殊コピーできるかやってみました 各レイヤーには 表示の有無、 0~100%の透明度、 重ねる時ブレンドする効果(まだ通常だけです) などが設定されて GLINEなどの命令が使えるもお手軽です
0そうだね
プレイ済み