二値化の実装が完了しました

Boltzmanです.
実に2か月ぶりの進展です.
正直学校の授業に追われて全くと言っていいほど手を付けていなかった今プロジェクトですが、
夏休みに入ると同時に少しの進展がありました.

とはいっても実は前回のDebugWindowを用いたデバッグは1週間くらいで終わっていました.
デバッグがすぐに終わったので, 閾値の平滑化まで終わらせてから記事を書こうと思っていたら2か月がたっていました.
v0.3.1

DebugWindowに関して変更は
・ヒストグラムに(平滑化前の)閾値が赤線で表示されるようになった
・平滑化時の, 中央のピクセルに対する周りの重みをスライダーで調整できるようになった
・選択した領域は赤と緑で二値化するようにした
の3点です.
DebugWindow

平滑化の効果は以下の通りです.
平滑化

局所的に閾値を計算した後そのまま用いると, 上の図のように領域内に同じ色(濃度の近い色)しか存在しない場合でも
無理やり分けようとしてノイズのようなものが入ってしまいます.
平滑化することによってそれを軽減することができます.

今回平滑化の実装でネックだったのが, HLSLのRWTexture2DがRead&Writeではなかったという点です.
RWTeture2Dを読み取るには, 第一にTexture2Dのように, 各ピクセルに割り当てられるデータ配列が一次元である必要があります.
これだけであれば, まだ問題ないのですが, 結局私は上のように宣言してもうまく読み込めなかったため, 諦めてカーネル関数を二つにて対処しました.
多分RandomWriteの略だったんでしょう.

次はラベリングの実装ですが, ラベリングは致命的に並列計算効率が悪いので, C#側で実装するかもしれません.
ただC#側で実装するにしても, ComputeShaderで処理した画像はRenderTextureに入っているため, そのままでは色を抽出できず厄介です.

何とか頑張ります.

Posted on