mieki256's diary



2026/04/01(水) [n年前の日記]

#1 [gmic] G'MICのフィルタの作り方を勉強中。その3

G'MIC用のフィルタを作ってみたい。作り方について勉強中。

環境は Windows11 x64 25H2 + GIMP 2.10.38 Portable + G'MIC-Qtプラグイン 3.7.4。

画像スタック/画像リストについて :

G'MICには、画像スタック? 画像リスト? という、概念というか仕組み/機能があるらしい。複数の画像を保持しておくことができる機能。

要するにレイヤー、とは違うんだよな…。重なって表示されるわけではないし…。まあ、単に画像を複数持っておけますよ、それをスタックとかリストとか呼んでますよ、ということらしい。

  • それぞれの画像にアクセスする時は [0] とか [1] とかつけるらしい。
  • [-1] とつけると、スタック内の一番最後の画像、という指定になる。
  • [0-50%] とつけると、0番目の画像から、スタックの真ん中あたりの画像までを指定していることになる。「-」を記述すると、ここからここまで、という指定になるっぽい。
  • [0--1] とつけると…。分かりづらいけど、「0」「-」「-1」を指定している。0番目の画像から、一番最後の画像まで、つまりは全画像を指定してることになる。
  • [0--1:2] とつけると、値の増え方を2ずつにする、という指定になる。[0] [2] [4] [6] ... を指定していることになる。

splitについて :

split x や split y というコマンドを見かけて、「一体コレは何だろう?」と疑問に思っていたけれど、画像を分割して画像スタックに入れるコマンドだったらしい。
  • split x を使うと、画像がx方向に分割されて、1 x h ドット、w個の画像が、画像スタックに入る。例えば 512x512ドットの画像に対して split x を指定すると、1 x 512 ドットの画像が512個作られる。
  • split y なら、y方向に分割されて、w x 1 ドット、h個の画像になる。512 x 512ドットの画像なら、512 x 1ドットの画像が512個作られる。

そのままだと元画像(画像スタック[0])に反映されない。append x や append y を使って結合する。
  • append x なら、画像リストの全ての画像を x 方向に結合して1枚の画像にする。
  • append y なら、画像リストの全ての画像を y 方向で結合して1枚の画像にする。

そういうコマンドが使えるなら…。1ラインごとに分割して横方向の表示位置を変えたらラスタースクロールっぽい見た目になるんじゃね?

試してみた。

to_rgba      # RGB画像をRGBA画像にする
split y      # y方向で分割。w x 1ドットの画像が h 個作られる。

repeat $!    # ループ開始。$! は、画像リストの個数を示す

  # shiftコマンドで表示位置をずらす。
  # $> は、ループ時のインデックス値。for (i=0; i<h; i++) { } で言うところの i に相当。
  # sin() で sin値が得られる。ラジアン値を与える。角度 * pi / 180 でラジアン値になる。
  # shift x,y,z,c,境界処理,補間処理
  
  shift[$>] {36*sin(3*$>*pi/180)},0,0,0,0,1
  
done         # ループ終了

append y     # 画像リスト内の全画像をy方向に結合

$!、$>、shift については以下で説明されてる。

_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Substitution Rules
_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Reference Documentation - shift

動かしてみたら、期待通りの結果になった。

gmic_split_shift_ss01.png

random_patternについて :

G'MICのコマンド一覧を眺めていたら、random_pattern というコマンドが目に入った。

_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Reference Documentation - random_pattern

なんだこれは! ちょっと面白そう…。

Various → Custom Code (Full)、で試してみたけど…。

random_pattern {w},{h},2

プレビュー画面では何の変化もない…。

「Display Debug Info on Preview」にチェックを入れたら原因が分かった。新しい画像として作られて、画像スタックに入るのね…。そのままだと元画像に影響を与えないらしい。

gmic_random_pattern_ss01.png


元画像と合成しないといけない。合成には、blend というコマンドが使えるらしい。

_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Reference Documentation - blend

「blend 合成モード,Opacity」を記述すれば合成される。この記述の仕方だと、画像スタックの全画像を合成する状態になるのかな。

合成モードは…。色々あり過ぎて何が何だか…。

ひとまず試してみた。

repeat 3                    # ループ開始
  random_pattern {w},{h},2  # ランダムパターン画像を作成
  to_rgba[-1]               # RGB画像をRGBA画像に変換。[-1]を指定しているのでストックの最後の画像に対して処理をする
  blend alpha,0.3           # 合成。alphaはアルファチャンネルに基づく合成だが、Opacityが0.3なのでうっすらと合成される
done

たしかに、元画像に対して合成できた。

gmic_random_pattern_ss02.png

line_aaについて :

線を引きたい。lineコマンド、もしくは line_aaコマンドが使えるっぽい。

以下で、512本のランダムな線を、ランダムな色で描画する。
repeat 512
  line_aa {u(w)},{u(h)},{u(w)},{u(h)},1.0,${-rgb},255
done

gmic_line_aa_ss01.png


line_aa はアンチエイリアス付きで線を描画する、と書いてあるように見える。ということは、line はアンチエイリアス無しのギザギザした線なのだろう…。

_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Reference Documentation - line
_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Reference Documentation - line_aa

u() は疑似乱数を返す関数(?)だけど、u(w) と書けば、(0 - 画像横幅)の範囲の乱数を返す。そのままだとコマンドに渡せないので、{ } で囲んで「ここは計算式だよ」と指定してやる。結果、{u(w)} と書くことになる。

同様に、{u(h)} は、(0 - 画像縦幅)の範囲の乱数を返す。

${-rgb} なる記述をどこかで見かけて、一体何を指定しているのか謎だったけど…。「-」はコマンドの前につける記号で、rgbというコマンドを呼び出していただけらしい。つまり、${-rgb} でランダムなRGB値を返してくれる。${-rgba} なら、ランダムなRGBA値を返してくれる。

_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Reference Documentation - rgb
_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Reference Documentation - rgba

一番最後につけている 255 は、アルファチャンネルの値。

以上、1 日分です。

過去ログ表示

Prev - 2026/04 -
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project