この質問を別の質問から切り離すように勧められました。ここにオリジナルがあります:
いくつかの画像処理の後、バイナリ画像を取得しますが、境界が非常に難しいため、ガウス フィルターを適用して柔らかい画像を取得します。結果はグレースケール画像です。この画像を別の画像のマスクとして適用する必要があります。どの画像にもアルファ チャネルがないため、この値を使用せずに色の混合を行う必要があります。私は仕事をするためにMarvin Frameworkを使用していますが、Marvinにはプラグインがありません。
@Override public void process(MarvinImage _imageIn, MarvinImage _imageOut, MarvinAttributes attrOut, MarvinImageMask _mask, boolean previewMode) {
MarvinImage mask = _imageIn;
MarvinImage image = _imageOut;
for(int y=0; y<mask.getHeight(); y++){
for(int x=0; x<mask.getWidth(); x++){
//ya que está en grayscale, los 3 valores son los mismos
int r1 = mask.getIntComponent0(x, y);
int g1 = mask.getIntComponent1(x, y);
int b1 = mask.getIntComponent2(x, y);
int r2 = image.getIntComponent0(x, y);
int g2 = image.getIntComponent1(x, y);
int b2 = image.getIntComponent2(x, y);
//al color de salida, le asignamos la luminicencia de la imagen mascara
int r = 0, g = 0, b = 0;
if(r1 > 0 || r2 > 0){
r = r1*r2/Math.max(r1, r2);
}
if(g1 > 0 || g2 > 0){
g = g1*g2/Math.max(g1, g2);
}
if(b1 > 0 || b2 > 0){
b = b1*b2/Math.max(b1, b2);
}
image.setIntColor(x, y, r, g, b);
}
}
}
しかし、このコードには私が解決できなかった小さなバグがあります。RGB 画像に白がある場合、色の結果がうまく結合されず、暗くなりません。私が探しているのは、gimp を使用して達成できるものです。2 レイヤーの画像があり、下の画像は RGB 画像で、上の画像はグレースケール マスクです。このレイヤーでは、関数 color to alpha を使用します。白色を目安に。結果は次のとおりです。
アルゴリズムは次のとおりです。
違いはかなり明白です。テスト用の 2 つの元の画像を次に示します。
(出典: imgsafe.org )