めぬ:
なお、jp-extension の最新公開版は rev5.1.13 ですが、この以下のページ で扱っている 改造パッチは rev5.3.3 を当てた後であてるようになって います。いまのところ私のところの SunOS4.1.1, Linux 2.0.30 Slackware 3.2/3.4, Solaris 2.6 では 問題なく動いているようですので、 5.3.3 をお勧めしておきます。
入手先:
この XV を使用して画像処理の研究を行う場合に考えられる第一のアプローチは
原画像(tifやjpegなどのこともあるでしょう)をいったん ppm などの
フォーマットに変換し、目的のフィルタプログラムを通し(フィルタの
仕様によってはいったんファイルに書出し)、XV で表示することです。
例: filter input.jpg | xv -
この方法で面倒なのは、画像を表示する度に XV を起動しなければならない
ことです。
それに対して、今回の提供する方法では XV で作業中の画像を XV から直接 フィルタプログラム等に渡し、処理結果を直接受け取る、というもの です。この方法は瞬間的にメモリやCPUのリソースを消費する という問題はありますが、手間や、応答性や操作性を考えると有効です。 また、XVには便利な領域選択機能もあり、処理範囲の指定も容易です。
R=R*C1 + G*C2 + B*C3 +C4 G=R*C5 + G*C6 + B*C7 +C8 B=R*C9 + G*C10 + B*C11 +C12という計算をします。色の交換や明るさ調整ができます。
さて、友達からパソコン通信系の画像ファイルをたくさんもらったのはいいけど 全部 lha で圧縮されてるや。jp-ext いれてるから、いちいち展開しなくとも いいけど、それぞれのファイルに入らないと中がどんなファイルか さっぱりやねぇ。う〜めんどくさ〜。P○wer V|ew ならそのくらいちゃん サムネイル表示してくれるのに...。それか!?と、もらった画像ファイルを見るのはそっちのけで、XV の改造に 入ったのでした。
普通に実行 ppmdiz options (<入力ファイル>) options: -range <sx> <sy> <ex> <ey> 処理範囲を(sx,sy)-(ex,ey)に規定します。 -output <filename> 出力ファイルを指定します。指定されない場合は 標準出力に出力されます。 入力ファイルを指定しない場合は 標準入力より読み込みます。 xv-algorithm extension で定義 Dizzer:PPM_RAW:PNM:::ppmdiz -range
普通に実行 ppmdim options (<入力ファイル>) options: -range <sx> <sy> <ex> <ey> 処理範囲を(sx,sy)-(ex,ey)に規定します。 -output <filename> 出力ファイルを指定します。指定されない場合は 標準出力に出力されます。 -bwidth <width> ぼんやりさせる範囲を外周からのピクセル数で指定します。 デフォルトで 10 -target <R> <G> <B> ぼんやりさせるための外周色を 0-255 の rgb で指定します。 デフォルトで 0,0,0 -calctag <width> ぼんやりさせる外周色を 元画像から計算します。計算は 外周から width ピクセル内にある画素を単純平均します。 デフォルトでは -target 優先。 -sin -parabola ぼんやりさせる時の傾斜パターンを 正弦波カーブ(-sin) 放物線カーブ(-parabola) に変更します。 デフォルトで 直線補間。 (見た目はあまりかわりません) 入力ファイルを指定しない場合は 標準入力より読み込みます。 実行例: djpeg jagaimoJG.jpg | ppmdim -bwidth 50 -calctag 10 | xv -rm 5 -quit - djpeg jagaimoJG.jpg | ppmdim -bwidth 50 -calctag 10 | xv -rm 5 -quit - -black #102030 (小細工済)
if (rmode != RM_CENTILE) { XSetForeground(theDisp, theGC, rootbg); XFillRectangle(theDisp, tmpPix, theGC, 0,0, dispWIDE, dispHIGH);と書いてあるところを
if (rmode != RM_CENTILE) { /* filling with border */ if(blkRGB==0x102030) XSetForeground(theDisp, theGC, XGetPixel(theImage,0,0)); else XSetForeground(theDisp, theGC, rootbg); XFillRectangle(theDisp, tmpPix, theGC, 0,0, dispWIDE, dispHIGH);と3行ほど足します(if 〜 else 部分)。 あとは 再度 make して下さい。こうすると、起動時に xv -black #102030 と 指定した場合に表示画像の左上の点の色で周りの余った領域を 塗りつぶします。