これは何をするものか
gimpのインクツールに手ブレ補正機能を追加するためのパッチです。手ブレ補正のついたペンを便宜上G-Penと呼んでいます。

技術的に言うと、線を引く座標を過去数点の座標位置の移動平均の座標に変更します。補正レベル(座標サンプル数)を上げると強力に内挿されます。
いろいろな手法との技術的な比較はG-Penパッチ/アルゴリズム比較を参照してください。

技術的に言うと、線を引く座標を過去数点の座標位置の移動平均の座標に変更します。補正レベル(座標サンプル数)を上げると強力に内挿されます。
いろいろな手法との技術的な比較はG-Penパッチ/アルゴリズム比較を参照してください。
ソースコードパッチ
現在、ソースコードパッチのみ公開中です。
対象者
gimpを自分でコンパイルできる人。
ライセンス
gimpのソースコードの派生物なのでGPLです。
ダウンロード
最新版にするには、下記のパッチをすべてダウンロードして、上から順番にパッチをすべて当ててください。
- gimp-2.2.17-gpen-work.diff
- gimp-2.2.17-gpen-work-070818-1.diff
- gimp-2.2.17-gpen-work-070819-1.diff
- ページの最下段にもリンクあり。(上のリンクがダメな場合は下のリンクを試してください)
変更履歴
- 2007-08-19
- 補正関数を速度ベースのガウシアンフィルタに変更。
- カーソルへの追随性が向上。
- ツールオプションのデフォルト値を変更。(+下のパラメータ説明にお奨め範囲を記載)
- 補正関数を速度ベースのガウシアンフィルタに変更。
- 2007-08-18
- ポインタの補正に重み付けを導入。
- 2007-08-16
- 最初のリリース
テスト環境
- ubuntu 07.04 (Feisty Fawn)
- OSは関係いはず。
- gimp-2.2.17 (本家よりダウンロード)
- diff -uNrでパッチ作成
- ./configure --disable-print でテスト(gutenprint非対応?だから)
パッチ適用方法
gimp-2.2.17のソースコードを展開 (tar jxf gimp-2.2.17.tar.bz2 など) cd gimp-2.2.17 patch -p1 < <パッチのディレクトリ>/gimp-2.2.17-gpen-work.diff patch -p1 < <パッチのディレクトリ>/gimp-2.2.17-gpen-work-<日付>-<番号>.diff ...... ./configure [オプション: 当方では--disable-print] make make install #ルート権限必要
使い方
- 道具箱パレットに"G-Pen"が追加されます。(アイコンはインクと一緒。ショートカットは"G")
- インクツールと同じように使います。
- 線を引くときに手ブレが補正されます。
- (2007-08-18より)カーソルを動かす速度によって補正率が変わります。ゆっくりマウスを動かすと強く補正され、素早くマウスを動かすと補正率は弱くなります。
- ツールオプションに"Pointer Adjustment"という項目が追加されます。各オプションの意味は次のとおり。
"Quality" | 補正するために使用する過去のサンプル数を指定します(1-20)。数が大いほど滑らかな曲線の補正になります。 1の場合は普通のインクツールと同じです。(20をお奨め) |
"Rate"(2007-08-18より) | 補正に関する適用割合を指定します(0-1000)。数値が大きいほど補正の適用割合が大きくなります。ただし、適用される効果は割合と比例関係にはないので注意が必要です。デフォルト値=25 (20-50程度がお奨め) |
"Draw pen line to finished point" | 補正が強くなると抜きの部分が途中で止まるような感覚になる。このチェックを入れると最後のカーソル位置まで線を引くようになる。(これはこれで使いづらい) (オフにすることをお奨め) |

既知のバグ
- 線の「入り」の部分の補正が弱い。→アルゴリズム上しかたない。多分気にならないレベル。
- ツールオプションにブラシの選択メニューが出る。なぜ?
- ときどき、undo tileがないと言われる。undo関係はサボりまくっているので詳細未調査。
- 移動平均なので、最後の抜きが変。"Draw pen line to finished pointer"のチェックオン・オフでちょっと挙動が変わることで回避中。
ソースコード
- なんでGimpInk関係のファイルをGimpInk2にリネームしているの?
- ここだけモジュール化できたらいいなぁっていう部分を抜き出しました。モジュールでgimpオブジェクトを参照できれば、本体に手を加えなくても良くなるはず...
- なんでGimpInk2はGimpInkを継承してないの?
- 継承するようにしたら動かなくなったから。push_undo関係が継承関係に依存したコードになってるような... 謎です。
- なんで移動平均なの?
- 線分補完をする方法だと、いくつかのサンプル点が集まったときにようやくある区間の線分がかけるようになります。こういった方法だと、補間曲線をかくときに一気に数点で指定される曲線をかくことになります。一方、gimpはmotionイベントがあるたびに、直前の位置から新しい位置までの直線を引く処理になっています。つまり、毎回一本の直線を引く処理になっています。これを最初に言った方法に変えるのは面倒だったので(ぉぃ)、最小限の変更で済む、しかも簡単な方法として移動平均を使ってます。結果的には結構良い特性を持っていたようです。(補完点が必ず内挿されるのでブレが小さくなる→手ブレ補正にピッタリ)
コメント・フィードバック
もしなにかあればこちらへどうぞ。(レスポンスは遅いと思います...)
- 投稿テスト。お気軽にどうぞ。 -- しげっち (2007-08-17 02:22:37)
- おんなじ用な内容の論文を発表していた人がいるそうです。
移動平均で補完するって一般的なんでしょうか。
http://ci.nii.ac.jp/naid/110003272091/ -- しげっち (2007-08-17 12:02:45) - 070819-1を2.4.0-rc1に移植したパッチとWindowsのバイナリです。
有用と思われましたら引き取ってあげてください。
http://cue.yellowmagic.info/files/gimp-2.4.0-rc1-gpen-work_bin_win32.7z&br()http://cue.yellowmagic.info/files/gimp-2.4.0-rc1-gpen-work.diff -- やまかわ (2007-08-21 20:15:34) - 記入ミス……
~.7zまでがWindowsバイナリのアドレスで、次のhttp:~が差分のアドレスになります。 -- やまかわ (2007-08-21 20:22:49) - ありがとうございます。
ひとまず自分のマシンへ保存しました。
このwikiだと、アップロードできるファイルが1MBまでなので、
どうやってアップするかはもうちょっと考えさせてください。 -- しげっち (2007-08-23 23:25:05) - ここにコメントできたんですね。はじめまして。
Ubuntu用の野良ビルドを勝手配布しています。
http://ub.x0.to/ub3/2007/08/gimpgpenubuntu_1.html -- ub3 (2007-08-29 21:23:42) - やまかわさん、申し訳ないです。
勝手に頂いた身でありながら僭越ではございますが、そのファイルで上書きするとテキストが使えないと言う状態になってしまいました。
いえ、正式に言えばテキストを開いて文字を入力した際に強制終了してしまうと言う現象が。。。
もしお暇な時間があれば、良かったら修正していただけないでしょうか・・・?
もしくは安定版で移植したパッチかバイナリか・・・。
かれこれリアルで10時間ぐらい戦っているのですが、スキルの無い私には厳しいので・・・。
勝手なお願いですが、聞き届けてくださるとありがたいです・・・。 -- riku (2007-09-05 17:00:12) - 詳しいことはわかりませんが、FreeTypeのライブラリが関係しているような感じです。
先ほどrc2のバイナリを置いておきました。FreeTypeのDLLも念のため入れてあるので、そちらもgimp-2.4.exeと一緒にコピーしておくと改善するかもしれません。
ファイルのアドレスは上記の"rc1"を"rc2"に書き換えたものになります。 -- やまかわ (2007-09-08 18:04:07) - sourceforge.jpにプロジェクトを作りました。
http://sourceforge.jp/projects/gimp-painter/
時間ができたらそっちに内容を移します。
-- しげっち (2007-09-14 00:02:23) - rc3もビルドしてみました。
とりあえず自サイトに置いておけばいいのかな… -- やまかわ (2007-09-27 05:02:18) - 5万円で買ったタッチパネルPCで、ペン入れができるなんて夢のようです。
本当にありがとうございます! -- kana (2007-11-07 20:07:06)