簡介
數字圖像在計算機上以位圖(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); }
} }
原始圖片:
灰度圖片: