1

写真のソラリゼーション効果を生み出すアルゴリズムを探しています。誰かにリンクやアルゴリズムがありますか?セピアや漫画など、他のフィルターにも興味があります。sepiaについては、ここでいくつかのコードを見つけました。Webで、これらのフィルターの実装に関する情報はあまり見つかりませんでした。

あいさつ

4

1 に答える 1

3

ソラリゼーションとは、応答曲線が単調ではないことを意味します(単に明るさが増加するのではなく、「出力」が明るくなり始め、暗くなり、「入力」が明るくなるにつれて再び増加します)。それを実装する最も簡単な方法は(簡単な値の場合)、ピクセル値を変換するより一般的なプロセスの特殊なケースとしてです。

これがメインルーチンのPython風の擬似コードです。

def transform(image, f):
    for pixel in image:
        pixel = f(pixel)

ピクセルを0から1の間の値に選択した場合(任意の値を正規化し、色がR、G、Bを同じように扱う場合)、次を使用してガンマを変更(コントラストを変更)できます。

transform(image, f(x): x^gamma)

ソラリゼーションの場合、減少してから再び増加する関数が必要です。したがって、1-4x + 4x ^ 2のようなもの:

transform(image, f(x): 1-4x+4x^2)

それがすべて少し不透明な場合のために、ここに物事をより明確にするためのいくつかの数字があります:

  • 入力画像が0(黒)の場合、出力は1-4 * 0 + 4 * 0 ^ 2 = 1(白)になります。
  • 入力画像が0.5(灰色)の場合、出力は1-4 * 0.5 + 4 * 0.5 ^ 2 = 1-2 + 1 = 0(黒)になります。
  • 入力画像が1(白)の場合、出力は1-4 * 1 + 4 * 1 ^ 2 = 1(白)になります。

次に、ユーザーが変更できるいくつかのパラメーター(a + bx + cx ^ 2など)を曲線に追加することで、さらに詳しく説明できます。

(実際には、より一般的である可能性があります-複数のピークを持つか、明るい点で黒くなる可能性があります-たとえば、黒い太陽のあるアンセルアダムスの画像があります。アイデアは同じです。高次の多項式を使用するか、符号を変更します。上記のパラメータの-a-vecは明るい領域を暗くします。また、多項式ではなくスプラインを使用できます。基本的に、これは入力から出力へのマッピングであり、「上下」に移動し、その中で多くの柔軟性があります。 。)。

于 2012-07-24T20:39:31.370 に答える