Re: モノクロ減色フィルタ ( No.1 ) |
- 日時: 2005/12/07 21:23
- 名前: 管理人
- 宮田さんもスクリプト始められたんですね。
スクリプトでの色処理はずいぶん時間がかかると思っていたんですが、 意外と速いですね。
ちょっと手を加えさせていただきました。 ピクセル処理は結構時間がかかるので、 1行処理するごとにイメージ更新して、ちゃんと動いているということを見せるようにして、 幅、高さは現在のイメージサイズを初期値にするよう変更してみました。
画像処理は単純なモノクロ化と 手抜きの輪郭抽出機能も追加してみました
#-----ここから ------- proc gray {col} { set g [expr ([lindex $col 0] + [lindex $col 1] + [lindex $col 2]) / 3.] return [list $g $g $g] }
proc rinkaku {col col1 col2} { set lim 0.2 set col_step 3. set col_g [expr [lindex $col 0] + [lindex $col 1] + [lindex $col 2]] set col1_g [expr [lindex $col1 0] + [lindex $col1 1] + [lindex $col1 2]] set col2_g [expr [lindex $col2 0] + [lindex $col2 1] + [lindex $col2 2]] if {[expr abs($col_g - $col1_g)] > $lim || [expr abs($col_g - $col2_g)] > $lim} { return [list 0. 0. 0.] } else { # いちおう減色もやってみる set r [expr round([lindex $col 0] * $col_step) / $col_step] set g [expr round([lindex $col 1] * $col_step) / $col_step] set b [expr round([lindex $col 2] * $col_step) / $col_step] return [list $r $g $b] } }
set wth $image_width set hght $image_height set ystp 1 set xstp 1 begin_dialog append_int_dialog_item "幅" append_int_dialog_item "高さ" append_int_dialog_item "X軸ステップ" append_int_dialog_item "Y軸ステップ" append_selection_dialog_item "処理/モノクロ減色/モノクロ/輪郭っぽいの" set_int_property_value 0 to $wth set_int_property_value 1 to $hght set_int_property_value 2 to $xstp set_int_property_value 3 to $ystp set_selection_property_value 4 to 0 set ok [ ask_dialog ] if { $ok } { set wth [ get_int_property_value 0 ] set hght [ get_int_property_value 1 ] set xstp [ get_int_property_value 2 ] set ystp [ get_int_property_value 3 ] set opr [ get_selection_property_value 4 ] end_dialog } else { end_dialog error cancel_dialog } set starty 0 set endy $hght for { set j $starty } { $j < $endy } {incr j $ystp } { set startx 0 set endx $wth for { set i $startx } { $i < $endx } { incr i $xstp } { set list [ read_pixel at { $i $j } ] set px_color($i,$j) $list set R1 [ lindex $list 0 ] set G1 [ lindex $list 1 ] set B1 [ lindex $list 2 ] if { $opr == 0 } { set am [expr $R1+$G1+$B1] if { $am < 1 } { write_pixel at { $i $j } to { 0 0 0} } elseif { $am < 2 } { write_pixel at { $i $j } to { 0.5 0.5 0.5 };#中間調の色指定 } else { write_pixel at { $i $j } to { 1 1 1 } } } elseif { $opr == 1 } { write_pixel at { $i $j } to [gray $list] } elseif { $opr == 2 } { if {$i > 0 && $j > 0} { write_pixel at { $i $j } to [rinkaku $list $px_color([expr $i-1],$j) $px_color($i,[expr $j-1])] } else { write_pixel at { $i $j } to {1. 1. 1.} } } set last_rgb $list } update_image wait_updating }
|
Re: モノクロ減色フィルタ ( No.2 ) |
- 日時: 2005/12/07 23:18
- 名前: 宮田
- あ、すごい‥ (^^;
>1行処理するごとにイメージ更新して、ちゃんと動いているということを見せるようにして、
これがあると時間が短く感じられますね。
>宮田さんもスクリプト始められたんですね。
いえ、私は面倒なことを行うつもりはないんです。 私自身はこういった画像処理はフォトレタッチに任せてしまいますし、静止画であれば 描くのには2Dのペイントやドローを使いますから。 ただ、Shadeでもイメージの処理ができるようなのでフィルタ処理もどきも可能かな ということと、簡単なスクリプトが書ければ形状作成の時間が短縮できるかもという ことで試してみただけのことだったんですけど。
>スクリプトでの色処理はずいぶん時間がかかると思っていたんですが、 >意外と速いですね。
私も単純に1ピクセルずつ処理するのだともっとかかると思っていましけど、 小さな画像だと結構速いですね。 画像の大きさが大きくなれば加速度的に時間が増えるかもしれませんけど。
|
Re: モノクロ減色フィルタ ( No.3 ) |
- 日時: 2005/12/08 02:03
- 名前: 管理人
- >いえ、私は面倒なことを行うつもりはないんです。
>私自身はこういった画像処理はフォトレタッチに任せてしまいますし、静止画であれば >描くのには2Dのペイントやドローを使いますから。 >ただ、Shadeでもイメージの処理ができるようなのでフィルタ処理もどきも可能かな >ということと、簡単なスクリプトが書ければ形状作成の時間が短縮できるかもという >ことで試してみただけのことだったんですけど。
それが正しいスクリプトとのつきあい方だと思います。 高度なプログラミング知識や開発用のソフトが必要なプラグインと違って、 だれでもちょこちょこっと書いてすぐに使えるものができて ちょこちょこっと変更できてしまうというのが スクリプトのいいところですからね。 汎用的に使えるものというより、ユーザーの作業スタイルにあったスクリプトを ユーザー自身が書くというのが本来の使い方だと思います。
私の場合、変な方向に行っちゃいましたけど・・・(^^;;
|
Re: モノクロ減色フィルタ ( No.4 ) |
- 日時: 2005/12/08 12:58
- 名前: 宮田
- > 汎用的に使えるものというより、ユーザーの作業スタイルにあったスクリプトを
> ユーザー自身が書くというのが本来の使い方だと思います。
ですね。 とは言うものの、スクリプトを公開してくれる作者さんがいるおかげで生産性はかなり高まっていると思います。 ルーチンで行うならともかく、一回の面倒な処理を行う場合、スクリプトを書くのが速いか、力技で手作業を行うか悩みますし、利用可能なスクリプトがあって、使わせて頂けるのなら相当な時間の節約になりますしね。
フイルタの補足 set g [expr ([lindex $col 0] + [lindex $col 1] + [lindex $col 2]) / 3.] ↑この部分が明度に相当する部分ですね。
で、比視感度で補正した場合、 set g [expr ([lindex $col 0]*0.299 + [lindex $col 1]*0.587 + [lindex $col 2]*0.114)] で補正されます。YCCのY(輝度)もしくはLa*b*やHSLのL(明度)に相当する部分です。
|