編集(管理者用) | 編集 | 差分 | 新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴
== o ==
ねこまたや web出張所
INDEX

トップページ
お知らせ
twitter
お道具箱
技術資料と雑談
ライブラリ
雑貨や(ダウンロード)
最近の更新
ねこまたやについて

twitter

ねこまたやのついった

企画モノ

psAxe情報ページ
自主制作アニメ
ぽこあぽこ られんたんど


あやかしあやし
エフェクトネタ帳



りまぴん
AE エクスプレッション
レンダー乙女とか
簡易版XPSリンカ
おまけギャラリ

BBS

ねこまたやBBS
開発室BBS

Language



開発室みたいなものでしたが
spamアクセスがはげしいのでページは凍結中です。
書き換えは管理人のみが可能です。
Nekomataya/2024

psPaintPlugin - [[psPaint]] 現在のフィルタプラグイン一覧


目次

psPaint 現在のフィルタプラグイン一覧

はじめに

psPaintプロジェクトの「超絶転用効かないプラグイン」の説明とソースです。

プロジェクトが一段落付くまでは、変更や修正の足が早いようにFilterFactry?で開発してます。 そのうちSDKに手を出すかも知れませんが…出さないか?

以下のソースはそのままFF(FilterFactory or FilterFoundry)で利用可能(なはず)です。

ツッコミ歓迎

SDKをおもちの方で、今回のプロジェクトに協力して同じ機能のプラグインを提供してくださる方、大歓迎

borderFill

[0/0/0](予約色)の黒い境界線を周辺色で置換するフィルタ。

概要

当該ピクセルの輝度が0の時、周辺ピクセルを参照して、最初に発見した輝度0と255以外のピクセルと値を交換します。

要するに「彩色レイヤ」の境界を周辺色で塗りつぶしてしまうわけです。

使い方

彩色レイヤまたは彩色レイヤのコピーに対して実行します。

調整項目はありません。

あらかじめ彩色レイヤの細線化が終了している場合は、1度実行するとすべての境界線が消えるはずですが、細線化が不十分な場合は黒いピクセルが残ります。

必要に応じて複数回処理してください。

ソース

r:
i==0?
((src(x-1,y,0)+src(x-1,y,1)+src(x-1,y,2))%765!=0?put(3,0):
((src(x+1,y,0)+src(x+1,y,1)+src(x+1,y,2))%765!=0?put(5,0):
((src(x-1,y-1,0)+src(x-1,y-1,1)+src(x-1,y-1,2))%765!=0?put(0,0):
((src(x+1,y+1,0)+src(x+1,y+1,1)+src(x+1,y+1,2))%765!=0?put(8,0):
((src(x,y-1,0)+src(x,y-1,1)+src(x,y-1,2))%765!=0?put(1,0):
((src(x,y+1,0)+src(x,y+1,1)+src(x,y+1,2))%765!=0?put(7,0):
((src(x+1,y-1,0)+src(x+1,y-1,1)+src(x+1,y-1,2))%765!=0?put(2,0):
((src(x-1,y+1,0)+src(x-1,y+1,1)+src(x-1,y+1,2))%765!=0?put(6,0):
put(4,0)
)))))))):put(4,0),
src(x-1+(get(0)%3),y-1+(get(0)/3),z)

g:
src(x-1+(get(0)%3),y-1+(get(0)/3),z)

b:
src(x-1+(get(0)%3),y-1+(get(0)/3),z)

a:
a

技術情報

ピクセルのが黒または白でない判定を以下の式で行っている。

 r + g + b % 765 != 0
この判定はFFの言語事情による物なので他言語に移植時は要注意。特に8ビット以外の環境に対応を行う時

colorRotation

画像の色味を変更するフィルタ

概要

輝度を維持して色相をシフトします。 同様の処理はphotoshopの色相・彩度フィルタでも可能ですが、この変換は(R-Y)/(B-Y)色空間で行われます。 色トレス抽出の判定空間と同じなので色トレスの微調整に使用できます。

使い方

ctl(0)に元の色相角 / ctl(1)に変換先の色相角 を設定してください。 差分だけ色相を回転します。

destination ,ctl(0) ,変換元の色相角を255分法で target ,ctl(1) ,変換先の色相角を255分法で

特定の色トレース部分を他の色に変換する時に使用できます。 画面の色の色情報は、スクリプトgetColorInfo.jsxで取得してください。

ソース

r:
put((76*r+150*g+29*b)/255,0),
put(b-get(0),1),
put(r-get(0),2),
put(c2d(get(1),get(2))+512,3),
put(c2m(get(1),get(2)),4),
put(r2x(get(3)+(ctl(0)-ctl(1))*4,get(4)),5),
put(r2y(get(3)+(ctl(0)-ctl(1))*4,get(4)),6),
put(get(0)+get(5),7),
put(get(0)+get(6),8),
put((255*get(0)-29*get(7)-76*get(8))/150,9),
get(8)

g:
get(9)

b:
get(7)

a

技術情報

内部的には色相角は1024分法です。

色相 0から1023までの値を指定するのですが、コントロールが255までの値なので 指定は4倍して適用されます。

dotRemoveW

単独白ピクセル除去

概要

周辺ピクセルを参照して流し込み彩色の困難な弧立ピクセルおよび先端ピクセルを除去する。 ペイント作業がラクになるので、組み込みの方が良さそう。

使い方

調整項目はありません。

2値化済レイヤに対して彩色前に適用してください。

高速化の為 Rチャンネルのみの値で判断しているので、色が変わるため彩色後には使用できません。

彩色途中に使用するなら少し反応は悪いが全チャンネル判定の版もあります。

ソース

R判定

r:
(c==255)&&(cnv(1,5,1,5,0,5,1,5,1,1)<=1024)?put(0,0):put(c,0),
get(0)

g:
get(0)

b:
get(0)

a

全チャンネル判定

r:
(c==255)&&(cnv(1,5,1,5,0,5,1,5,1,1)<=1024)?0:c

g:
(c==255)&&(cnv(1,5,1,5,0,5,1,5,1,1)<=1024)?0:c

b:
(c==255)&&(cnv(1,5,1,5,0,5,1,5,1,1)<=1024)?0:c

a

技術情報

3x3のコンボルブ関数を利用して上下左右に5倍のピクセルの重みづけを行なって市松配置4ピクセル までのピクセルを検索している。

他の言語に移植の際は、もう少し大きな領域まで判定した方が作業性が上がると思われる。 5x5程度までのマトリスクを考慮のこと。

paintPreProcess

彩色レイヤを作る。

概要

画像を黒白2値化して 彩色レイヤを作成します。 単純なしきい値ではなく薄い色のトレス線もはっきりと出るように加工します。

使い方

ソース

r:
put(scl(min(min(r,g),b),ctl(1),ctl(0),0,255)<ctl(2)? 0:255,0),
get(0)

g:
get(0)

b:
get(0)

a:
a

技術情報

 RGB各チャンネルの最小値を取得して一次データとして、
 一次データをctl(1)-ctl(0)範囲でクリップ、
 さらに0-255にマッピングした後、
 ctl(2)を域値にして二値化しています。

アルファチャンネル操作は行っていませんので、 必要にしたがってあとから別にアルファを処理してください。

pickup_Color

色トレース抽出フィルタ

概要

特定の色域・彩度の部分を残して、他のエリアを抜き去ります。 主にアニメーションのセル画彩色の為に「色鉛筆の線」の部分をレイヤから抽出する ために作成されています。

使い方

対象のレイヤを直接書き換えますので、必要にしたがって画像の複製にたいして適用してください。

スライダの機能は以下の通り。Windows版ではなぜかスライダに名前をつけられないので、ナンバーでご確認ください

color ctl(0) 色値指定スライダ
range ctl(1) 抽出色相範囲
threshold ctl(2) 彩度域値
bg ctl(2) 背景域値
line ctl(3) ラインパラメータ

色値指定スライダは、抽出する中心色をある指定します。 判定は全1024色相ですが、スライダの値が0-255なので4倍して使用しています。 ひとつのフィルタですべての色に対応しています。

抽出色相範囲は通常は 0で判定範囲が狭く/255で最大になります。 スキャナ画像から色鉛筆の線を抽出する場合は、デフォルトの127(中央)程度で適正です。 余分な色(線)が出る場合はこれを狭くして不要な線を排除します。

彩度域値は、一定以下の彩度のピクセルを除去するためのしきい値です。 安価なスキャナやデジカメでは、黒い線の周辺にそのような色ノイズがかなり多量にのります。 これは最近の製品の特色で言ってみれば「しょうがない」のでうまく調整してください。 グラフィックソフトで直書きした画像や事前処理が済んでいる場合などでは不要なケースもあります。

背景・ラインのパラメータは線の調子を整えます。 グラフィックソフト等で直書きした場合や、事前フィルタで調整済の線に対しては デフォルトの背景=255/ライン=0 の初期値でご使用ください。(これが線の調子を最も保存します)

抽出は以下のパラメータを目安にしください。単色フィルタの設定値の1/4です。

鉛筆の色中心色相(/255)
ピンク 37
76
黄色 121
黄緑 138
169
水色 216
229

同じレイヤに対してフィルタを二回以上かけると全面ベタになります。これは仕様です。

ソース

r:
put(c2d(b-i,r-i)+512,0),
put(c2m(b-i,r-i),1),
put(0,2),
put(150,3),
put(r2x(get(2)+(ctl(0)*4),get(3)),4),
put(r2y(get(2)+(ctl(0)*4),get(3)),5),
put((get(4)+76),6),
put((get(5)+76),7),
put((256*76-29*get(4)-76*get(5))/150,8),
min(get(6),get(8))>get(7)?0:scl(get(7),min(get(6),get(8)),max(max(get(7),get(8)),get(6)),0,255)

g:
min(get(6),get(7))>get(8)?0:scl(get(8),min(get(6),get(7)),max(max(get(7),get(8)),get(6)),0,255)

b:
min(get(8),get(7))>get(6)?0:scl(get(6),min(get(7),get(8)),max(max(get(7),get(8)),get(6)),0,255)

a:
get(0)>(ctl(0)*4-ctl(1)) && (get(0)<(ctl(0)*4+ctl(1))) && get(1)*10>ctl(2)?255-scl(min(min(r,g),b),ctl(4),ctl(4)+((255-ctl(4))*ctl(3))/255,0,255):0

技術情報

ターゲットの色相値は、付属のgetColorInfo.jsxスクリプトを使って調べる事ができます。

置き替え用のダミーカラーは色相から似た色を自動生成していますが、原色に再加工している関係から指定の色相値ぴったりにはなりません。 指定中心色からちょっぴりズレていますのでご了承ください。

punchOutRed

細線化専用補助フィルタ

概要

スクリプト・アクション内部で使用するフィルタです。

使い方

細線化操作の際に最後に使用するフィルタです。

一般の使用はしないでください。

ソース

r:r

g:r

b:r

a:a

技術情報

細線化を高速にする為の補助フィルタ 細線化処理をRチャンネルだけに行なっているので、最後にまとめてRチャンネルを他のチャンネルに複製してモノクロにしている。

他の言語に移植する際は不要かも

punchOutWhite

白[255/255/255]部分のアルファを抜く

概要

抜き部分の白[255/255/255](予約色)を検出してアルファチャンネルを抜くフィルタ。

ほぼアニメ専用ですな

使い方

調整項目はありません。

抜きたいレイヤに対して適用してください。

ソース

r:r

g:g

b:b

a:r+g+b==765?0:c

技術情報

r+g+b==765? は FFでは多分最も高速な判定と思われる。

…が、8bit以外の環境へ移植の際は注意

scanLineNormalize

スキャン画像の予備調整を行う

概要

スキャンまたはデジカメでキャプチャした線画を、「セル画風」に事前調整します。

使い方

調整したいレイヤに対して適用してください。

以下の動作を行います。

以下の三つの調整のスライダがあります。

saturation ctl(0) 彩度域値
bg ctl(1) 背景域値
line ctl(2) ラインパラメータ

彩度域値は、一定以下の彩度のピクセルを無彩色にします。 廉価なスキャナやデジカメは、構造上無彩色の周囲に色のついたノイズが沢山でます。 これで、グレーの部分をあらかじめ無彩色に統一する事で色トレスの分離性能を高めます。

背景域値は、背景として認識する領域の明るさです。 この値を境にして背景は[255/255/255]に、それ以外の部分はコントラストの調整をします。

ラインパラメータは、数値をあげてゆくとどんどん硬調になります。 あまり値を上げると線がジャギジャギになりますのでご注意ください。

ソース

r:
(sqr((b-i)*(b-i)+(r-i)*(r-i))*5)>ctl(0)?put(1,0):put(0,0),
get(0)?put(r,1):put(i,1),
get(0)?put(g,2):put(i,2),
get(0)?put(b,3):put(i,3),
get(1)<ctl(1)?put(scl(255-get(1),0,255,ctl(1),255),4):put(get(1),4),scl(255-abs(get(1)-get(4)),(ctl(1)*ctl(2))/255,255,0,255)

g:
get(2)<ctl(1)?put(scl(255-get(2),0,255,ctl(1),255),4):put(get(2),4),scl(255-abs(get(2)-get(4)),(ctl(1)*ctl(2))/255,255,0,255)

b:
get(3)<ctl(1)?put(scl(255-get(3),0,255,ctl(1),255),4):put(get(3),4),scl(255-abs(get(3)-get(4)),(ctl(1)*ctl(2))/255,255,0,255)

a:
a

技術情報

内部的には以下の処理を行っています。

thinXXX

細線化フィルタの機能ブロックフィルタ

概要

スクリプト・アクション内部で使用するフィルタです。

使い方

細線化操作の際に使用するフィルタです。

一般の使用はしないでください。

ソース

//000 r:
i==0 && ( cnv(1,1,1, 0,0,0, 4,4,4, 1)==3060 ||cnv(1,1,0, 1,0,4, 0,4,4, 1)==3060 ||cnv(1,0,4, 1,0,4, 1,0,4, 1)==3060)? put(255,0) : put(c,0),get(0)
//001 r:
i==0 && ( cnv(4,4,4, 0,0,0, 1,1,1, 1)==3060 ||cnv(4,4,0, 4,0,1, 0,1,1, 1)==3060 ||cnv(4,0,1, 4,0,1, 4,0,1, 1)==3060)? put(255,0) : put(c,0),get(0)//from RightBottom
//002 r:
i==0 && ( cnv(4,0,1, 4,0,1, 4,0,1, 1)==3060 ||cnv(0,1,1, 4,0,1, 4,4,0, 1)==3060 ||cnv(1,1,1, 0,0,0, 4,4,4, 1)==3060)? put(255,0) : put(c,0),get(0)//from RightBottom
//003 r:
i==0 && ( cnv(1,0,4, 1,0,4, 1,0,4, 1)==3060 ||cnv(0,4,4, 1,0,4, 1,1,0, 1)==3060 ||cnv(4,4,4, 0,0,0, 1,1,1, 1)==3060)? put(255,0) : put(c,0),get(0)//from RightBottom

g:g

b:b

a:a

技術情報

XXXの部分は番号で置換される。それぞれが細線化工程の機能ブロックになっている。

対象画像はRGBモード(8bit/チャンネル)で、あらかじめ黒白二値化されていることが使用条件。

全てのフィルタを順次実行することで、黒ラインの周囲を赤で置換してゆく。 どのフィルタもラストの1ピクセルは削らないので、最低でも1ピクセル太さの線が残る。

黒白の線画にする為には、最後に赤を白に置換する必要が有ります。

通常の細線化処理は、終了条件を与えてループ処理するが、FilterFactoryでは、以下の仕様の為やや特殊な構成になっている。

アクションまたはスクリプトで各フィルタを連続実行する必要が有る。

trace_Xxx

色トレース抽出フィルタ

概要

特定の色域・彩度の部分を残して、他のエリアを抜き去ります。 主にアニメーションのセル画彩色の為に「色鉛筆の線」の部分をレイヤから抽出する ために作成されています。

Xxx の部分には色の略号が入ります。

使い方

対象のレイヤを直接書き換えますので、必要にしたがって画像の複製にたいして適用してください。

スライダの機能は以下の通り。Windows版ではなぜかスライダに名前をつけられないので、ナンバーでご確認ください

color ctl(0) 色値オフセット
range ctl(1) 抽出色相範囲
threshold ctl(2) 彩度域値
bg ctl(2) 背景域値
line ctl(3) ラインパラメータ

色値オフセットは、フィルタにセットされた中心色をある程度の範囲で移動させます。

ひとつのフィルタは色鉛筆1色分に対応させています。制作時にサンプリングされた色鉛筆の色値をもとに

作成されていますが、スキャナや鉛筆、紙その他の条件の為調整が必要な場合にスライダを調整して中心色を変更してください。

抽出色相範囲は通常は 0で判定範囲が狭く/255で最大になります。

スキャナ画像から色鉛筆の線を抽出する場合は、デフォルトの127(中央)程度で適正です。

彩度域値は、一定以下の彩度のピクセルを除去するためのしきい値です。

安価なスキャナやデジカメでは、黒い線の周辺にそのような色ノイズがかなり多量にのります。 これは最近の製品の特色で言ってみれば「しょうがない」のでうまく調整してください。

グラフィックソフトで直書きした画像や事前処理が済んでいる場合などでは不要なケースもあります。

背景・ラインのパラメータは線の調子を整えます。

グラフィックソフト等で直書きした場合や、事前フィルタで調整済の線に対しては

デフォルトの背景=255/ライン=0 の初期値でご使用ください。(これが線の調子を最も保存します)

現在以下のフィルタがあります。

鉛筆の色略号 中心色相(/1023)
ピンク P149
R307
黄色 Y487
黄緑 GY557
G680
水色 C870
B921

一枚の画面に多色の色鉛筆を混用すると部分的に混色で分離不能になりやすいので、手作業の修正が増えます。 また、隣接した色を分離しようとして判定範囲をあまり狭くするとシャギーがたちやすくなります。 ご注意ください。

同じレイヤに対してフィルタを二回以上かけると2値化された線なります。これは仕様です。

ソース

r:
put(908,0),//ここに中心色相をセット
put(c2d(b-i,r-i)+512,1),
put(c2m(b-i,r-i),2),
put(0,3),//置き替え色(r)
put(0,4),//置き替え色(g)
put(255,5),//置き替え色(b)
get(1)>(ctl(0)+get(0)-127)-ctl(1) && get(1)<(ctl(0)+get(0)-127)+ctl(1) && get(2)*10>ctl(2)?put(255-scl(min(min(r,g),b),ctl(4),ctl(3)+((255-ctl(3))*ctl(4))/255,0,255),6):put(0,6),
get(6)==0?255:get(3)

g:
get(6)==0?255:get(4)

b:
get(6)==0?255:get(5)

a:
get(6)

技術情報

各フィルタは基本的に同じ物で、ソース冒頭に書き込んである中心色相とレイヤ置き替え用の代用色が違うだけです。 特定の色鉛筆に対してカスタマイズする際は、以下のソースを参考に値を書き換えてください。

ターゲットの色相値は、付属のgetColorInfo.jsxスクリプトを使って調べる事ができます。

traceAll 一括トレース抽出

白部分を透明化してトレスレイヤを作る。

概要

白(下地)以外のトレス線を一括してひとつのレイヤに抽出します。 有名な"Eliminate White"と同じです。

"Eliminate White"+"白フリンジ削除"を行った場合とほぼ同じ結果になります。

処理を二回かけるのが面倒なかたにどうぞ。

セル画的には、あとのトレス線の処理に時間がかかるかも知れませんが、元のトレスをそのまま残す場合はレイヤがむやみに増えなくてシアワセかも知れません。

使い方

調整項目はありません。アルファのあるレイヤに対して適用してください。 背景レイヤに対して適用するとチョトすごい事になります。

ソース

r<min(g,b)?0:scl(r,min(g,b),255,0,255)

g<min(r,b)?0:scl(g,min(r,b),255,0,255)

b<min(r,g)?0:scl(b,min(r,g),255,0,255)

255-(min(r,min(g,b)))

技術情報

アルファの生成に関しては"Eliminate White"とまるで同じです。 ピクセルから白成分を同時に除去しているので、白部分は黒に変換されます。

traceK

主線の抽出をします

概要

黒いトレース部分を残してほかを透明にします。

使い方

対象のレイヤを直接書き換えますので、必要にしたがって画像の複製にたいして適用してください。

有名な"Eliminate White"に似ていますが、あちらは、画像の色を保持して背景の白部分を抜く動作をします。

このフィルは黒い部分のみを残して、ほかを抜くので色トレスが残りません。 動作が違うのでご注意ください。(色トレスが残りません)

スライダの機能は以下の通り。Windows版ではなぜかスライダに名前をつけられないので、ナンバーでご確認ください

saturation ctl(0) 彩度域値
bg ctl(1) 背景域値
line ctl(2) ラインパラメータ

彩度域値は通常はデフォルトの 127 (スライダ中央固定)でほぼ適正です。

暗色・薄い色・補色等の掛け合わせてで彩度の低い領域がノイズになる場合に調整してください。

背景・ラインのパラメータは線の調子を整えます。

グラフィックソフト等で直書きした場合や、事前フィルタで調整済の線に対しては デフォルトの背景=255/ライン=0 の初期値でご使用ください。(これが線の調子を最も保存します)

同じレイヤに2回以上適用すると、2値化されたラインになります。これは仕様です。

r:
sqr((b-i)*(b-i)+(r-i)*(r-i))*5<ctl(0)?
put(scl(255-max(max(r,g),b),ctl(1)*ctl(2)/255,ctl(1),0,255),0):put(0,0),
get(0)==0?255:0

g:
get(0)==0?255:0

b:
get(0)==0?255:0

a:
get(0)

技術情報

特になし