-4

この質問のコードを作成する必要があります。

  1. 最初に、美しいシーンの乱雑さを除いて、ビネットが単独でどのように見えるかを理解する必要があります。このために、均一に照らされた単色の平面 (日中の白い壁や真っ青な空など) の写真を取得し、「ビネット プロファイル」として使用します。次のビネット プロフィール画像が表示されます。

    この画像では、画像の中心に近いピクセルは、中心から離れたピクセルよりも高い RGB 値 (つまり、明るいピクセル) を持っています。画像も白黒であるため、特定のピクセルの赤、緑、青の値は同じです。この画像を変更しないでください。

  2. ステップ 1 のビネット プロファイル イメージをカメラでキャプチャした通常の写真のフィルタとして使用して、ビネットを削除できるようにする必要があります。このためには、写真画像 (ビネット付き) をビネット プロフィール画像で分割する必要があります。周辺減光画像のピクセルの RGB 値はエッジに向かって小さい (暗い) ため、元の画像の対応するピクセルを小さい数で割ると明るくなります。

これらがヒントです

ヒント 1: これには、画像に対してピクセル単位で操作を実行する必要があります。つまり、1 つのステップでそれを行うことはできません。

ヒント 2: 有効な RGB 値は 0 (最も暗い) から 255 (最も明るい) の間であるため、最初の課題は、除算の結果得られる RGB 値を各チャンネルの 0 ~ 255 の範囲内に保つことです。


編集:

サンプルコード:

def runA1(picture): myFile = pickAFile() picture = makePicture(myFile)

 myFile2 = pickAFile()
picture2 = makePicture(myFile2)


for x in range(0,getWidth(picture)):
    for y in range(0,getHeight(picture)):
      px = getPixel(picture,x,y)
      color = getColor(px)
      color = makeLighter(color)
      setColor(px,color)

for x in range(2,getWidth(picture)):
    for y in range(2,getHeight(picture)):
      px = getPixel(picture,x,y)
      color = getColor(px)
      color = makeDarker(color)
      setColor(px,color)



show(picture2)
4

1 に答える 1

2

あなたは自分で何かを試したことを証明していないので、私はあなたが何を試すべきかについてのヒントを与えるだけです。

  1. の形式で、0〜255の3つの整数として表される単一のピクセルについて考えてみ(R,G,B)ます。ビネットマスクの対応するピクセルの値Aは、0〜255です。で除算(R,G,B)し、255A掛けて 、ケラレのないピクセルを取得し(RR,GG,BB)ます。(なぜ256を掛ける必要があるのですか?)

  2. R,G,Bを超える値について何をしたいかを決定します255Aビネット値がゼロの場合はどうなりますか?

  3. 画像の各ピクセルに対してこれを実行します。ピクセルの一番上の行が左から右に機能し、次の行が下に移動し、完了するまで続きます。


ちなみに、この種のことは、MATLAB、Octave、 Numpy / Scipyなど、ファーストクラスの数値行列をサポートする言語でのワンステップ操作です。これがMATLABの例です。

processed_image = original_image ./ repmat(vignette_image,[1 1 3]) * 256

編集2:

サンプルコードに関するコメント:

  1. インデントが間違っています-このコードは実行されません。StackOverflowに貼り付けたときに、これが壊れた可能性があります。修正してください。特に、

    • defステートメントはそれ自体で一列に並んでいる必要があります。
    • myFile2 =....def:ステートメントからインデントする必要があります。
  2. myFile1myFile2-これらの変数名はより意味のあるものになる可能性があります。(これらのうち、元の写真はどれですか?ビネットマスクはどれですか?代わりにoriginal_file、これらの変数を呼び出してみてください。 、vignette_fileの同上。)myPicture1myPicture2

  3. コードのコメントはどこにありますか?あなたのコードが何をしているのか見分けるのは難しいです。

これとは別に、より多くのコードを投稿する必要があります。あなたの例は、短く、自己完結型の、正しい例である必要があります。現在、コード例は自己完結型ではありません。これを実行するには、、、、などの関数も必要になるためですgetPixel()。また、インデントエラーのためにコンパイルできません。getColor()makeLighter()

于 2012-04-16T08:27:49.243 に答える