from:http://blog.sina.com.cn/s/blog_13c6397540102wqtt.html
在圖像處理中,用RGB三個分量(R:Red,G:Green,B:Blue),即紅、綠、藍三原色來表示真彩色,R分量,G分量,B分量的取值范圍均為0~255,比如電腦屏幕上的一個紅色的像素點的三個分量的值分別為:255,0,0。
?
像素點
???像素點是最小的圖像單元,一張圖片由好多的像素點構成,下圖是一張美女的大白腿的圖片。
查看這張圖片的信息,尺寸是800 * 800 的,寬度是800像素,高度是800像素。也就是說這張圖片是由一個800 * 800的像素點矩陣構成的(不理解矩陣是什么意思的話,可以把矩陣理解為C語言中的二維數組),這個矩陣是800行,800列,像素是圖像的最小單元,這張圖片的寬度是800個像素點的長度,高度是800個像素點的長度,共有800 * 800 = 640000個像素點。
因為一個像素點的顏色是由RGB三個值來表現的,所以一個像素點矩陣對應三個顏色向量矩陣,分別是R矩陣,G矩陣,B矩陣,它們也都是800 *800大小的矩陣。下面展示這張美女圖片的一部分顏色矩陣數據:
這個是R矩陣中的一部分
這個是G矩陣中的一部分
這個是B矩陣中的一部分
比如每個矩陣的第一行第一列的值分別為:R:240,G:223,B:204,所以這個像素點的顏色就是(240,223,204),三個矩陣的值不一定一 一對應,這樣做只是為了便于讀者理解。
圖像的灰度化
?????在理解了一張圖片是由一個像素點矩陣構成之后,我們就知道我們對圖像的處理就是對這個像素點矩陣的操作,想要改變某個像素點的顏色,我們只要在這個像素點矩陣中找到這個像素點的位置,比如第x行,第y列,所以這個像素點在這個像素點矩陣中的位置就可以表示成(x,y),因為一個像素點的顏色由紅、綠、藍三個顏色變量表示,所以我們通過給這三個變量賦值,來改變這個像素點的顏色,比如改成紅色(255,0,0),可以表示為(x,y,(R=255,G=0,B=0))。
??????那么什么叫圖片的灰度化呢?其實很簡單,就是讓像素點矩陣中的每一個像素點都滿足下面的關系:R=G=B(就是紅色變量的值,綠色變量的值,和藍色變量的值,這三個值相等,“=”的意思不是程序語言中的賦值,是數學中的相等),此時的這個值叫做灰度值。
?
灰度處理的方法:
???????一般灰度處理經常使用兩種方法來進行處理。
???方法1:
??????????灰度化后的R=(處理前的R + 處理前的G +處理前的B)/ 3
??????????灰度化后的G=(處理前的R + 處理前的G +處理前的B)/ 3
??????????灰度化后的B=(處理前的R + 處理前的G +處理前的B)/ 3
?
???美女圖片經過方法1進行灰度化后的效果如下:
?
????????方法2:
???????????灰度化后的R = ?處理前的R * 0.3+ 處理前的G * 0.59 +處理前的B * 0.11
???????????灰度化后的G = ?處理前的R * 0.3+ 處理前的G * 0.59 +處理前的B * 0.11
???????????灰度化后的B = ?處理前的R * 0.3+ 處理前的G * 0.59 +處理前的B * 0.11
美女圖片經過方法2進行灰度化后的效果如下:
個人覺得第二種方法處理的效果比較好,第一種方法處理后的圖片有點模糊。
圖像的二值化
?????什么叫圖像的二值化?二值化就是讓圖像的像素點矩陣中的每個像素點的灰度值為0(黑色)或者255(白色),也就是讓整個圖像呈現只有黑和白的效果。在灰度化的圖像中灰度值的范圍為0~255,在二值化后的圖像中的灰度值范圍是0或者255。
??????黑色:
???????????????二值化后的R = ?0
???????????????二值化后的G = ?0
???????????????二值化后的B = ?0
??????白色:
???????????????二值化后的R = ?255
???????????????二值化后的G = ?255
???????????????二值化后的B = ?255
???????那么一個像素點在灰度化之后的灰度值怎么轉化為0或者255呢?比如灰度值為100,那么在二值化后到底是0還是255?這就涉及到取一個閥值的問題。
常用的二值化方法:
??????方法1:
??????????取閥值為127(相當于0~255的中數,(0+255)/2=127),讓灰度值小于等于127的變 ???????????為0(黑色),灰度值大于127的變為255(白色),這樣做的好處是計算量小速度快,但是缺點也是很明顯的,因為這個閥值在不同的圖片中均為127,但是不同的圖片,他們的顏色分布差別很大,所以用127做閥值,白菜蘿卜一刀切,效果肯定是不好的。
?????方法2:
??????????計算像素點矩陣中的所有像素點的灰度值的平均值avg
??????????(像素點1灰度值+...+像素點n灰度值)/ n = 像素點平均值avg
?????????然后讓每一個像素點與avg一 一比較,小于等于avg的像素點就為0(黑色),大于avg的 像 ?????????素點為255(白色),這樣做比方法1好一些。
????方法3:
??????????使用直方圖方法(也叫雙峰法)來尋找二值化閥值,直方圖是圖像的重要特質。直方圖方法認為圖像由前景和背景組成,在灰度直方圖上,前景和背景都形成高峰,在雙峰之間的最低谷處就是閥值所在。取到閥值之后再一 一比較就可以了。
下面給出一張美女圖片二值化后的效果圖:(漂亮的大白腿依稀可見。)
?
??????