XV で Go!

このページは John Bradley 氏作の画像処理プログラム XV を パワーアップするページです。近年 gimp というものもあり、 そのお絵書き性能やプラグインの性能は目を見張るものがありますが、 まだまだ絵を見たりするぶんにはちょっと重過ぎます。 ということで、XV もまだまだ活躍する余地が残っていると思います。 (NHK で映ったマーズパスファインダの映像によると NASA の 担当セクションでも XV をつかっているようです)

めぬ:


XV Japanese Extension

これは必須です。日本で最大のXVの拡張パッチです。 日本国内で流通している MAG,PIC といった画像形式を取り扱えるほか、 tar+gzip や LHA で圧縮されているファイルを一時的に自動展開して ディレクトリとして扱える機能や TextViewer の日本語化なども 行なわれています。より詳しいことは The XV japanese extension のページを御覧下さい。

なお、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 (XV-Algorithm_Extension)

XV には強力な色処理機能のほかに いくつかの画像処理ツールとして コントロールウィンドウの [Algorithms]ボタンに Blur などがあります。 これらは画像の加工という点では様々な効果が得られますが、 画像処理の研究に用いるという目的にはいまいちです。 というのも、2値化などの基本的な処理が含まれていないためです。

この XV を使用して画像処理の研究を行う場合に考えられる第一のアプローチは 原画像(tifやjpegなどのこともあるでしょう)をいったん ppm などの フォーマットに変換し、目的のフィルタプログラムを通し(フィルタの 仕様によってはいったんファイルに書出し)、XV で表示することです。
例: filter input.jpg | xv - この方法で面倒なのは、画像を表示する度に XV を起動しなければならない ことです。

それに対して、今回の提供する方法では XV で作業中の画像を XV から直接 フィルタプログラム等に渡し、処理結果を直接受け取る、というもの です。この方法は瞬間的にメモリやCPUのリソースを消費する という問題はありますが、手間や、応答性や操作性を考えると有効です。 また、XVには便利な領域選択機能もあり、処理範囲の指定も容易です。

機能

動作確認

現在 動作を確認しているのは

附属フィルタと処理例

作り方

設定の仕方

サンプルの設定ファイル filters/.xvalgext.def をみるとだいたい 見当がつくかと思いますが、くわしいことは パッチにも含まれる ドキュメントの3節を参照してください。 (げ、Netscape Communicator だと UNIX 版でも .doc は msword なの??)

使い方

  1. フィルタプログラムを用意してどこかにおきます。パスが通っていれば 問題ありませんが、パスが通っていない場所を使用する場合には定義ファイルの FilterPath にディレクトリを記述します。
  2. フィルタの起動時引数などを元に定義ファイルを作成し、 必要なら コンパイル時に指定したディレクトリに入れます。
  3. XV を起動します。この時、定義ファイルは カレントディレクトリ →ホームディレクトリ→コンパイル時指定ディレクトリの順で 検索されます。また、-algextdef オプションで明示的に指定することも 可能です。
  4. プルダウンメニューより機能を呼び出します。

    その他


    ディレクトリ・サムネイル

    とある土曜の昼下がり、某Kくんはある問題に頭をなやませていました。
    さて、友達からパソコン通信系の画像ファイルをたくさんもらったのはいいけど 全部 lha で圧縮されてるや。jp-ext いれてるから、いちいち展開しなくとも いいけど、それぞれのファイルに入らないと中がどんなファイルか さっぱりやねぇ。う〜めんどくさ〜。P○wer V|ew ならそのくらいちゃん サムネイル表示してくれるのに...。それか!?
    と、もらった画像ファイルを見るのはそっちのけで、XV の改造に 入ったのでした。
    (そもそも、一番最初に 自動展開をしようとしたときも、原因は パソコン通信の画像:mag が lha で圧縮された奴 だったなぁ)

    機能

    visual schnauzer でアイコンを表示するとき 実際にどういう感じになるかは実例 を 御覧下さい。

    動作確認

    現在 動作を確認しているのは

    作り方

    1. あらかじめ、Japanese Extensionにしたがって jp-extension のパッチを xv-3.10a にあてます。 アルゴリズム拡張パッチは当てておく必要は多分ありません。
    2. さらに ディレクトリ・サムネイル・パッチを patch -p1 で重ねてあてます。
    3. xmkmf; make します。
    あとは特に設定することはありません。

    使い方

    visual schnauzer で update ボタンをおす/プルダウンする/ ^u を押すなどして下さい。場合によっては、.xvpics ディレクトリの なかを消しておく必要がある場合があるかもしれません。

    その他

  5. ディレクトリ・サムネイル・パッチは くまがいまさあき(kumagai@emura.mech.tohoku.ac.jp)が 作成しました
  6. このパッチを使用することによって、何らかの害をもたらしたとしても 責任を持つことはできません。
  7. つまり、各自の責任の元、ご使用下さい
  8. 関連ファイル

    妙なフィルタ

    ここでは 時には役に立つかも知れないけど、汎用性は全くない?フィルタを 紹介します。

    8色に減色

    元画像を8色(いわゆるディジタルRGBの8色)まで減色します。 見ためはきれいとはいえませんが、画像サイズはかなり小さくなりますし、 カラー画面なら、大抵どんなところでも表示できます。
    → サンプル

    作り方

    ソースファイル(ppmdiz.c) を gcc -o ppmdiz ppmdiz.c としてコンパイルします。
    (要 ppmif.c

    使い方

    普通に実行
       ppmdiz options (<入力ファイル>)
         options:
           -range <sx> <sy> <ex> <ey>   
                処理範囲を(sx,sy)-(ex,ey)に規定します。
           -output <filename>
                出力ファイルを指定します。指定されない場合は
                標準出力に出力されます。
         入力ファイルを指定しない場合は 標準入力より読み込みます。
    
    xv-algorithm extension で定義
       Dizzer:PPM_RAW:PNM:::ppmdiz -range    
    

    注意

    たしか、こういうのをディザっていったと思うんですけど、もしかすると 大間違いかも知れません。

    外周ぼんやりフィルタ

    適当な絵を壁紙(なんでデスクトップといいつつ壁紙なんでしょう(謎)) としてはる時に、tile ではるにしても、centered ではるにしても、 かなり画像のエッジが気になります。解け込ませるようにはれないものかと 考えて作ったのがこのフィルタです。
    →実例1 指定色(ここでは白)にぼんやり
    →実例2 外周を平均した色にぼんやり
    ルートウィンドウに張る時の背景色と組み合わせて 使うときれいに仕上がります。ちなみに、角の部分に線が見えますが、 おそらく人間の目の錯覚です(バグかも)。

    作り方

    ソースファイル(ppmdim.c) を gcc -o ppmdim ppmdim.c -lm としてコンパイルします。
    (要 ppmif.c

    使い方

    普通に実行
       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 (小細工済)
    

    1分でできる小細工

    ルートウィンドウ に張る時の背景色

    XV で適当な絵を X Window System の背景(いわゆる壁紙)として 張り付けることはよくあります。そのときにタイル表示をする分には いいのですが、root-centered のモード(起動オプション -rm 5) ですと周りがデフォルトでまっくろ。warped や blick はちょっと みためいまいち。そんな時には、起動オプションで 「-black なんとか」 とすると「なんとか」色がつきます(#??????でRGB指定も可)。知ってました?
    #ソースを見てて気づいた私(^^;
    で、その色を絵に合わせていちいち調べて指定するのが大変なわけです。 というわけで、改造:
    xvroot.c の108 行目あたりの
      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 と 指定した場合に表示画像の左上の点の色で周りの余った領域を 塗りつぶします。
    え? まわりを #102030 の色で塗りつぶしたいですって? そのときは #112030 とかで我慢して下さい(場合によってはもっと値をずらす 必要があることがあります)