彩色圖像與灰度圖像轉換的程序設計

簡介

數字圖像在計算機上以位圖(bitmap)的形式存在,位圖是一個矩形點陣,其中每一點稱爲像素(pixel),像素是數字圖像中的基本單位。一幅m×n大小的圖像,是由m×n個明暗度不等的像素組成的。數字圖像中各個像素所具有的明暗程度由灰度值(gray level)所標識。一般將白色的灰度值定義爲255,黑色灰度值定義爲0,而由黑到白之間的明暗度均勻地劃分爲256個等級。對於黑白圖像,每個像素用一個字節數據來表示,而在彩色圖像中,每個像素需用三個字節數據來表述。彩色圖像可以分解成紅(R)、綠(G)、藍(B)三個單色圖像,任何一種顏色都可以由這三種顏色混合構成。在圖像處理中,彩色圖像的處理通常是通過對其三個單色圖像分別處理而得到的。

算法

如果要將彩色圖像轉換爲灰度圖像,只要將圖像中的每個像素取出來,然後取像素的R、G、B顏色分量,利用如下公式計算灰度值:

    int gray = r*0.3 + g*0.59 + b*0.11;

然後再令像素的R、G、B分度值都爲gray就行了 。

也有的資料提出灰度轉換公式如下所示:

    int gray = (r+g+b) / 3;

兩種方法轉換後的灰度圖片效果差不多。

代碼樣例

public void GrayScale(Bitmap image )
{
    int width = image.Width - 1;
    int height = image.Height - 1;

    Color color;
    for (int i = width; i >= 0;i--)
    {
    for (int j = height; j >= 0;j--)
    {
        //讀取每一個像素
        color = image.GetPixel(i,j);        //計算灰度值
        int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);
        //int gray = (color.R + color.G + color.B) / 3;
        Color colorResult = Color.FromArgb(255,gray,gray,gray);
        //設置像素爲灰度
        image.SetPixel(i, j, colorResult);
    }    
}
}
原始圖片:
灰度圖片:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章