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

C# 圖像二值化與抖動算法實戰:從原理到 AForge.NET 與手動實現

     編輯:關於C語言

二值化基礎流程

  1. 灰度化:Gray = 0.299R + 0.587G + 0.114B(依人眼敏感度加權)。
  2. 閾值分割:全局閾值 127,<127 設 0(黑),≥127 設 255(白)。

有序抖動 —— 視覺保真度提升

利用抖動矩陣將誤差分散,使黑白圖像產生灰度視覺錯覺。效果對比:

  • 原圖 → 全局閾值二值化(細節嚴重丟失) → 有序抖動二值化(保留層次感)。

AForge.NET 快速集成

Bitmap temp = AForge.Imaging.Image.Clone(src, PixelFormat.Format24bppRgb);
temp = Grayscale.CommonAlgorithms.RMY.Apply(temp); // 灰度化
pictureBox.Image = new OrderedDithering().Apply(temp); // 抖動二值化

庫支援數十種濾鏡,代碼極簡潔,適合快速原型。

手動實現灰度化(unsafe 指針加速)

private static Bitmap WeightGrayScaleImple(Bitmap bmp, Func foo) {
    BitmapData data = bmp.LockBits(new Rectangle(0,0,bmp.Width,bmp.Height),
        ImageLockMode.ReadWrite, bmp.PixelFormat);
    unsafe {
        byte* ptr = (byte*)data.Scan0;
        for (int y=0; y (byte)(0.299*r + 0.587*g + 0.114*b));

注意: 項目屬性 → Build → 勾選 "Allow unsafe code" 才能編譯通過。

總結

AForge.NET 適合快速開發;特殊需求(如硬體僅支援黑白)仍需手寫優化算法。掌握灰度化、閾值、抖動核心原理才能靈活應對。

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