小白入门计算机视觉(二) : 图像基本处理----灰度图和二值化
文章目錄
- 解剖圖像
- 圖像處理基本原理
- RGB模型
- 灰度
- 二值化
- 圖像失真問題
從本節開始,我就要正式踏上小白的計算機視覺探索之路,先從圖像基礎學習吧
解剖圖像
要學會圖像處理首先就得知道圖像的結構,平時我們見到的圖片有彩色的,也有黑白的,還有灰色圖,尤其是手機里的美圖工具,有很多圖片效果可以供我們選擇,圖片的存儲大小也可以自己自定義去更改,我們先探索一下圖像的構造
像素
像素是分辨率的單位,也是構成位圖圖像的基本單元,并且每個像素都有自己的顏色,所以才能看到色彩不一,清晰度不同的圖片
分辨率
分辨率也可以稱作是解析度,就是單位英寸內的像素點數,單位為PPI(Pixels Per Inch)。但是在平時分辨率總被我們錯誤的認為就是位圖圖像內的像素點數量
色調
各種圖像色彩模式下原色的明暗程度,級別范圍從0到255,共256級色調,這也是圖像為什么能展示出不同的顏色。
我們常見的彩色圖像有兩種類型:RGB(光學原色)和CMYK(色彩原色)。RGB表示的是:紅,藍,綠,,主要用于相機,視頻等;CMYK表示的是:青,品紅,黃,黑,主要用于印刷行業
圖像視覺指標
對比度:指不同顏色之間的差別。對比度=最大灰度值/最小灰度值
亮度:這個容易理解,就是讓圖像色彩更加鮮亮
銳度:即清晰度,它是反映圖像平面清晰度和圖像邊緣銳利程度的一個指標
色度:色彩的純度,也叫飽和度或彩度
圖像處理基本原理
RGB模型
RGB色彩模式是工業界的一種顏色標準,這個標準幾乎包括了人類實例所能感知的所有顏色。通過上面這張圖就可以看出當三個原色都不覆蓋的區域,就呈現出黑色,當三個原色疊加起來中心最亮的疊區為白色的,所以在圖像處理過程中[0,0,0]表示的是黑色,[255,255,255]表示的是白色。
RGB的每個通道都有0-255共256級色彩,按這樣計算,整個RGB模型可以組合出256x256x256=16777216中色彩,通常也稱1600萬色或者24位色(2的24次方)。說到這里還有一種ARGB模型,也就是色彩模式加上Alpha(透明度)通道,常見于32位位圖的存儲結構。
RGB模型的元神其實就是三維直角坐標系中的一個單位立方體(圖中的每個點顯示的是RGB值不是坐標),在正方體的主對角線上的RGB分量都相等,就會產生由暗到亮的黑白圖像,這便是灰度。(0,0,0)是黑色,對應的RGB就是[0,0,0],(1,1,1)是白色,對應的RGB就是[255,255,255]
灰度
表示圖像像素明暗程度的數值,也就是黑白圖像中點的顏色深度。范圍一般為0-255。白色為 255,黑色為0。
灰度化作用
處理圖像時候為什么要先灰度化呢?主要有兩個原因
1. RGB并不能反映圖像的形態特征,只是從光學的原理上進行顏色的調配
2.減小圖像原始數據量,便于后續處理時計算量更少
灰度化的方法
常用的圖像灰度化有四種算法:分量法,最大值法,均值法,加權均值法
分量法
分量法就是用RGB三個分量的某一個分量作為該點的灰度值
Gray(R)(i,j)=R(i,j)Gray_{(R)}(i,j)=R(i,j)Gray(R)?(i,j)=R(i,j)
Gray(G)(i,j)=G(i,j)Gray_{(G)}(i,j)=G(i,j)Gray(G)?(i,j)=G(i,j)
Gray(B)(i,j)=B(i,j)Gray_{(B)}(i,j)=B(i,j)Gray(B)?(i,j)=B(i,j)
python實現分量法
最大值法
最大值法就是將彩色圖像中的三分量亮度的最大值作為灰度圖的灰度值
Gray(i,j)=max(R(i,j),G(i,j),B(i,j))Gray(i,j)=max(R(i,j),G(i,j),B(i,j))Gray(i,j)=max(R(i,j),G(i,j),B(i,j))
python實現最大值法
均值法
均值法就是將彩色圖像中的三分量亮度求平均得到一個灰度圖
Gray(i,j)=(R(i,j)+G(i,j)+B(i,j))/3Gray(i,j)=(R(i,j)+G(i,j)+B(i,j))/3Gray(i,j)=(R(i,j)+G(i,j)+B(i,j))/3
python實現均值法
加權均值法
加權均值法就是為每個通道加上一個權重,權重之和一定要等于1。
Gray(i,j)=WR?R(i,j)+WG?G(i,j)+WB?B(i,j)Gray(i,j)=W_R*R(i,j)+W_G*G(i,j)+WB*B(i,j)Gray(i,j)=WR??R(i,j)+WG??G(i,j)+WB?B(i,j)
這里說明一下,一般來說有兩組比較常用的權重
Gray(i,j)=0.072169?B(i,j)+0.715160?G(i,j)+0.212671?R(i,j)Gray(i,j)=0.072169*B(i,j)+0.715160*G(i,j)+0.212671*R(i,j)Gray(i,j)=0.072169?B(i,j)+0.715160?G(i,j)+0.212671?R(i,j)
還有一個是從人體生理學角度所提出的一種權值(人眼對綠色的敏感最高,對藍色敏感最低)
Gray(i,j)=0.114?B(i,j)+0.578?G(i,j)+0.299?R(i,j)Gray(i,j)=0.114*B(i,j)+0.578*G(i,j)+0.299*R(i,j)Gray(i,j)=0.114?B(i,j)+0.578?G(i,j)+0.299?R(i,j)
python實現加權均值法
我們看看處理后的效果吧
完整代碼
我們先看原圖
轉灰度圖后的效果
從最終的效果來看,和原圖相比,用加權均值處理的的兩個灰度圖最清晰
二值化
二值化就是就是將整個圖像呈現出明顯的黑白效果的過程。
在數字圖像處理中,二值圖像占有非常重要的地位,圖像的二值化使圖像中數據量大為減少,從而能凸顯出目標的輪廓,增加識別率,比如現在常見的OCR識別技術。
二值化原理
圖像二值化是在圖像灰度圖的基礎上按照閾值將256級的灰度圖的色調分割為0或者255,也就是圖像只有兩種顏色,非黑即白。
二值化方法
二值化常用的方法有全局二值化,局部二值化,局部自適應二值化。
全局二值化就是設置一個全局的閾值,對圖像進行二值化
局部二值化的方法就是按照一定的規則將整幅圖像劃分為N個窗口,對這N個窗口中的每一個窗口再按照一個統一的閾值T將該窗口內的像素劃分為兩部分,進行二值化處理
自適應二值化就是在局部二值化的基礎之上,將閾值的設定更加合理化。該方法的閾值是通過對該窗口像素的平均值E,像素之間的差平方P,像素之間的均方根值Q等各種局部特征,設定一個參數方程進行閾值的計算,例如:T=aE+bP+c*Q,其中a,b,c是自由參數。這樣得出來的二值化圖像就更能表現出二值化圖像中的細節
這里我就先介紹一個最簡單的全局二值化
要想從多值的圖像中直接提取出目標物體,最常用的方法就是設定一個全局的閾值T,用T將圖像的數據分成兩部分:大于T的像素群和小于T的像素群。將大于T的像素群的像素值設定為白色(或者黑色),小于T的像素群的像素值設定為黑色(或者白色)。
比如:計算每一個像素的(R+G+B)/3,如果大于我們設定的閾值,則設置該像素為白色,即R=G=B=255;否則設置為黑色,即R=G=B=0
為了計算方便,一般情況下我們都是先把圖片轉成灰度圖,再做二值化處理
二值化中的算法
二值化的算法常見的有膨脹算法、腐蝕算法,而這兩種算法的交互使用又形成了開運算和閉運算。這個暫時先了解一下吧,到后面我研究透了再另詳細的分析吧
閾值的選取
閾值在二值化處理過程中是一個核心參數,那么閾值的選取也是二值化過程中的核心算法。
一般比較常見的有七種:Otsu(大律法)、最大熵、迭代法、自適應閥值、手動、迭代法、基本全局閾值法,且都已經封裝在在opencv里了
我拿一個數字圖像做個簡單的二值化處理吧
number.jpg import cv2def binary_deal(img,T):''':param T: 閾值設定:return:'''img = cv2.imread(img)grayimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)size = grayimg.shapefor i in range(size[0]):for j in range(size[1]):if (grayimg[i,j]< T):grayimg[i,j] = 0else:grayimg[i,j] = 255return grayimg img = "number.jpg" img1 = binary_deal(img,100) cv2.imshow("binary",img1) cv2.waitKey(0)我用opencv先把圖片轉換成了灰度圖,然后通過全局閾值的方法進行二值化處理,廢話不多說直接看效果吧
binary.jpg圖像二值化處理的原理和算法我還沒研究透,就先分享點基礎的吧,隨后再簡單提一下灰度化時候圖像失真的問題吧
圖像失真問題
我們在處理圖像時候因為采用的是整型的RGB值,這樣計算后會丟失掉小數點后面的部分,這樣就會導致圖像顏色值失真,計算過程越多,失真就越嚴重。
為了減少圖像失真,一般情況下會將RGB值轉為[0,1]之間的浮點數。
floatR=Rij255float_R=\frac{R_{ij}}{255}floatR?=255Rij??
floatG=Gij255float_G=\frac{G_{ij}}{255}floatG?=255Gij??
floatB=Bij255float_B=\frac{B_{ij}}{255}floatB?=255Bij??
這樣就將RGB值誤差的變化量縮小了255倍,在處理時候,圖像失真情況也會得到很大的改善
總結
以上是生活随笔為你收集整理的小白入门计算机视觉(二) : 图像基本处理----灰度图和二值化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 盛世昊通上市美国纳斯达克,基建建设任重而
- 下一篇: 24.Odoo产品分析 (三) – 人力