首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 超酷圖像特效(三):黑白效果三種演算法比較

     編輯:關於C語言

前言

本系列第三篇,實作三種經典彩色轉灰度演算法:最大值法、平均值法、加權平均值法 (ITU-R BT.601),比較視覺效果差異。

三種演算法

演算法公式特點
最大值法Gray = max(R, G, B)亮度最高,細節較少,對比強
平均值法Gray = (R + G + B) / 3簡單均衡,但忽略人眼敏感度差異
加權平均值法Gray = 0.299R + 0.587G + 0.114B (或 0.7/0.2/0.1)符合人眼亮度感知,**視覺最自然**

完整程式碼


private void btnGrayscale_Click(object sender, EventArgs e)
{
    try
    {
        int w = pictureBox1.Image.Width, h = pictureBox1.Image.Height;
        using (var newBmp = new Bitmap(w, h))
        using (var oldBmp = (Bitmap)pictureBox1.Image)
        {
            for (int x = 0; x < w; x++)
                for (int y = 0; y < h; y++)
                {
                    Color p = oldBmp.GetPixel(x, y);
                    int r = p.R, g = p.G, b = p.B;
                    int gray;

                    // 切換演算法:0=平均, 1=最大值, 2=加權 (預設)
                    int mode = 2;
                    switch (mode)
                    {
                        case 0: gray = (r + g + b) / 3; break;
                        case 1: gray = Math.Max(r, Math.Max(g, b)); break;
                        case 2: gray = (int)(0.7 * r + 0.2 * g + 0.1 * b); break;
                        default: gray = (r + g + b) / 3; break;
                    }
                    newBmp.SetPixel(x, y, Color.FromArgb(gray, gray, gray));
                }
            pictureBox1.Image = newBmp;
        }
    }
    catch (Exception ex) { MessageBox.Show(ex.Message, "提示"); }
}

效果圖

黑白效果比較

標準權重說明

  • 0.299R + 0.587G + 0.114B:ITU-R BT.601 (SDTV) 標準亮度。
  • 0.2126R + 0.7152G + 0.0722B:ITU-R BT.709 (HDTV) / sRGB 標準亮度。
  • 本碼使用 0.7/0.2/0.1 為簡化近似,實務建議採用標準係數。

結語

加權平均值法最符合人眼視覺,是灰度轉換首選。理解亮度感知模型,有助於選擇適合專案需求的演算法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved