RGBの特定の色を抜き出だすツールをPixelBenderで作ってみよう

PixelBenderでツールを作ってみる

前回にPixelBenderでのフィルタの作り方から使い方を紹介しました。
今回は、使えそうなツールを実際に作る方法を紹介いたします。

RGBで指定した範囲の色だけを残すツールを作る


各RGB値ごとのMaxとMinを設定できます。
その範囲内のピクセルのみ元の画素を残します。


結果は上記図のようになります。

実際に作ってみました。
以下をコピペしたら動作はします。

kernel SelectRGBColor< namespace : "photoshopper";
vendor : "photoshopper";
version : 1;
description : "Select a range of RGB values!";
>
{
input image4 src;
output pixel4 dst;

parameter int Ch1_rangeRMax
<
minValue:int(0);
maxValue:int(255);
defaultValue:int(255);
>;
parameter int Ch1_rangeRMin
<
minValue:int(0);
maxValue:int(255.0);
defaultValue:int(0);
>;
parameter int Ch2_rangeGMax
<
minValue:int(0);
maxValue:int(255);
defaultValue:int(255);
>;
parameter int Ch2_rangeGMin
<
minValue:int(0);
maxValue:int(255.0);
defaultValue:int(0);
>;
parameter int Ch3_rangeBMax
<
minValue:int(0);
maxValue:int(255);
defaultValue:int(255);
>;
parameter int Ch3_rangeBMin
<
minValue:int(0);
maxValue:int(255.0);
defaultValue:int(0);
>;


void
evaluatePixel()
{
float4 inputColor = sampleNearest(src,outCoord());
if(inputColor.r >= float(Ch1_rangeRMin)/float(255) && inputColor.r <= float(Ch1_rangeRMax)/float(255) &&
inputColor.g >= float(Ch2_rangeGMin)/float(255) && inputColor.g <= float(Ch2_rangeGMax)/float(255) &&
inputColor.b >= float(Ch3_rangeBMin)/float(255) && inputColor.b <= float(Ch3_rangeBMax)/float(255) ){
dst = inputColor;
}else{
dst = float4(0,0,0,0);
}
dst.a = inputColor.a;
}
}

|

PixelBender内ではRGBの値は0〜255ではなく、
0.0〜1.0の値で扱われます。

ですが、パラメータはわかりやすいように0〜255で
扱えるようにしています。

ここの色空間をRGBではなく、HSVやYIQにすることで
Photoshopにはない色空間でのマスクを作ることができます。

また試してみようかと思います。

スポンサーリンク