15

セピアトーンを作成するために必要な基本的な操作は何ですか? 私の基準は perl imagemagick ライブラリなので、基本的な操作は簡単に使用できます。量子化 (グレースケール化)、カラー化、画像の強調を試みましたが、まだ少しぼやけています。

4

4 に答える 4

26

C# のセピア コンバーターのサンプル コードは、こちらの回答で入手できます:このセピア トーン変換アルゴリズムの何が問題なのですか?

アルゴリズムはこのページから取得され、各入力ピクセルの色は次のように変換されます。

outputRed = (inputRed * .393) + (inputGreen *.769) + (inputBlue * .189)
outputGreen = (inputRed * .349) + (inputGreen *.686) + (inputBlue * .168)
outputBlue = (inputRed * .272) + (inputGreen *.534) + (inputBlue * .131)

これらの出力値のいずれかが 255 より大きい場合は、単純に 255 に設定します。これらの特定の値は、Microsoft が推奨するセピア トーンの値です。

于 2012-02-25T23:43:13.713 に答える
4

これは C# ですが、基本的な概念は同じです。これを perl に変換できる可能性があります。

  private void SepiaBitmap(Bitmap bmp)
{
    Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
    System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
        System.Drawing.Imaging.PixelFormat.Format32bppRgb);

    IntPtr ptr = bmpData.Scan0;

    int numPixels = bmpData.Width * bmp.Height;
    int numBytes = numPixels * 4;
    byte[] rgbValues = new byte[numBytes];

    System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, numBytes);
    for (int i = 0; i < rgbValues.Length; i += 4)
    {
        rgbValues[i + 2] = (byte)Math.Min((.393 * red) + (.769 * green) + (.189 * (blue)), 255.0); //red
        rgbValues[i + 1] = (byte)Math.Min((.349 * red) + (.686 * green) + (.168 * (blue)), 255.0); //green
        rgbValues[i + 0] = (byte)Math.Min((.272 * red) + (.534 * green) + (.131 * (blue)), 255.0); //blue
        if ((rgbValues[i + 2]) > 255)
        {
            rgbValues[i + 2] = 255; 
        }

        if ((rgbValues[i + 1]) > 255)
        {
            rgbValues[i + 1] = 255;
        }
        if ((rgbValues[i + 0]) > 255)
        {
            rgbValues[i + 0] = 255;
        }
    }

    System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, numBytes);
    this.Invalidate();
    bmp.UnlockBits(bmpData);

}
于 2012-02-26T06:28:18.790 に答える
1

AForge.NET ライブラリでの実装方法を見てみましょう。C# コードはこちら にあります。

どうやら基本は

  • それをYIQ色空間に変換します
  • それを修正する
  • RGBに戻す

完全なアルゴリズムはソース コードにあり、さらに RGB -> YIQ および YIQ -> RGB 変換が説明されています。

于 2010-01-18T12:14:36.033 に答える
1

imagemagic コマンドラインを使えば簡単です。

http://www.imagemagick.org/script/convert.php

変換時に「-sepia-tone threshold」引数を使用します。

奇妙なことに、PerlMagick API にはこれを直接行うためのメソッドが含まれていないようです:

http://www.imagemagick.org/script/perl-magick.php

...そして、Sepia メソッドへの参照はありません。

于 2009-06-30T02:20:40.850 に答える