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

C# 超酷圖像特效(四):柔化效果實作 (高斯模糊)

     編輯:關於C語言

前言

本系列第四篇,實作「柔化效果」:使用 3×3 高斯權重核平滑圖像,減少雜訊與細節對比。

效果原理

  1. 高斯核 (近似整數):[1,2,1, 2,4,2, 1,2,1],權重和 = 16。
  2. 對每像素及其 8 鄰域加權平均,除以 16。
  3. 結果限制在 [0,255]。

完整程式碼


private void btnSoften_Click(object sender, EventArgs e)
{
    try
    {
        int w = pictureBox1.Image.Width, h = pictureBox1.Image.Height;
        using (var bmp = new Bitmap(w, h))
        using (var src = (Bitmap)pictureBox1.Image)
        {
            int[] gauss = { 1,2,1, 2,4,2, 1,2,1 };
            for (int x = 1; x < w - 1; x++)
                for (int y = 1; y < h - 1; y++)
                {
                    int r = 0, g = 0, b = 0, idx = 0;
                    for (int cx = -1; cx <= 1; cx++)
                        for (int cy = -1; cy <= 1; cy++)
                        {
                            Color p = src.GetPixel(x + cx, y + cy);
                            r += p.R * gauss[idx];
                            g += p.G * gauss[idx];
                            b += p.B * gauss[idx];
                            idx++;
                        }
                    r = Clamp(r / 16); g = Clamp(g / 16); b = Clamp(b / 16);
                    bmp.SetPixel(x - 1, y - 1, Color.FromArgb(r, g, b));
                }
            pictureBox1.Image = bmp;
        }
    }
    catch (Exception ex) { MessageBox.Show(ex.Message, "提示"); }
}

int Clamp(int v) => v < 0 ? 0 : (v > 255 ? 255 : v);

效果圖

柔化效果

進階:可分離高斯模糊

3×3 核可分解為兩次 1D 卷積:水平 [1,2,1]/4 + 垂直 [1,2,1]/4,運算量從 9 降為 6 次乘加/像素。大核 (如 31×31) 效益更明顯 (O(n²)→O(n))。

結語

高斯模糊是圖像處理基石。掌握核設計、可分離優化、LockBits 實作,可高效支援柔化、陰影、光暈、景深等大量應用場景。

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