2013年1月6日日曜日

GenericFilters その2

更新しました。

GenericFilters-0.2.2.7x
https://github.com/chikuzen/GenericFilters

* Sobel/Prewitt: rshiftオプションを追加
* いろいろバグフィックス

ちょっとだけ内部処理の説明を書いておきます。

画像処理を行う場合、各ピクセルの値は、そのフォーマットによって扱える範囲が限定されます。
8bitフォーマットであればピクセルは0~255、16bitフォーマットであれば0~65535の範囲内に存在する値をとらなければなりません。
しかし、いろいろな計算を行った場合、出力値はしばしばこの下限/上限を超えることがあります。

この対処法として、最終的に出力する前に次のようなことが行われます。
1. 単純に、下限値/上限値で切り捨て。
2. 絶対値で扱う(値が下限値の0を超えた場合の対策)
3. 値を割ることで範囲内に収める(値が上限を超えた場合の対策)

GenericFiltersのConvolution(HV)はsaturateオプションをFalseにすれば処理2(絶対値化)が行われます。
divisorオプションによって処理3が行われます。
最後に処理1(値の切り捨て)を行うことで、出力値は範囲内に収められます。

さて、SobelとPrewittも多少工程が複雑であることを除けば単なる畳み込み演算なのですが、これらはエッジ検出に特化したアルゴリズムなので、自由度はConvolutionよりも低くなっています。
まず、処理2の絶対値化は必ず行われます。
そして、処理3の割る数は(主に処理速度の都合により)2の整数乗(rshiftで指定)に限定されています。

では今回はこのへんで

0 件のコメント:

コメントを投稿