2013年6月6日 星期四

【AForge.NET】將灰階影像轉成直方圖 Histogram

public unsafe static Histogram GrayHistogram(Bitmap bmp)
{
    Histogram gHistogram;//建立AForge的直方圖格式
    BitmapData data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
        ImageLockMode.ReadOnly, bmp.PixelFormat);//鎖住輸入影像記憶體
    int width = bmp.Width;
    int height = bmp.Height;

    if (bmp.PixelFormat == PixelFormat.Format8bppIndexed)//檢查影像格式
    {
        int[] gray = new int[256];//宣告直方圖陣列
        byte value;
        int offset = data.Stride - width;
        byte* p = (byte*)(void*)data.Scan0;//影像第一個記憶體位置
        for (int y = 0; y < height; y++)
        {
            for (int x = 0; x < width; x++, p++)
            {
                value = *p;//取得該pixel的值
                gray[value]++;
            }
            p += offset;
        }
        gHistogram = new Histogram(gray);
        bmp.UnlockBits(data);
        return gHistogram;
    }
    else
    {
        bmp.UnlockBits(data);
        return null;
    }
}

0 意見:

張貼留言