小白入门计算机视觉(二) : 图像基本处理----灰度图和二值化
文章目錄
- 解剖圖像
- 圖像處理基本原理
- RGB模型
- 灰度
- 二值化
- 圖像失真問(wèn)題
從本節(jié)開始,我就要正式踏上小白的計(jì)算機(jī)視覺(jué)探索之路,先從圖像基礎(chǔ)學(xué)習(xí)吧
解剖圖像
要學(xué)會(huì)圖像處理首先就得知道圖像的結(jié)構(gòu),平時(shí)我們見到的圖片有彩色的,也有黑白的,還有灰色圖,尤其是手機(jī)里的美圖工具,有很多圖片效果可以供我們選擇,圖片的存儲(chǔ)大小也可以自己自定義去更改,我們先探索一下圖像的構(gòu)造
像素
像素是分辨率的單位,也是構(gòu)成位圖圖像的基本單元,并且每個(gè)像素都有自己的顏色,所以才能看到色彩不一,清晰度不同的圖片
分辨率
分辨率也可以稱作是解析度,就是單位英寸內(nèi)的像素點(diǎn)數(shù),單位為PPI(Pixels Per Inch)。但是在平時(shí)分辨率總被我們錯(cuò)誤的認(rèn)為就是位圖圖像內(nèi)的像素點(diǎn)數(shù)量
色調(diào)
各種圖像色彩模式下原色的明暗程度,級(jí)別范圍從0到255,共256級(jí)色調(diào),這也是圖像為什么能展示出不同的顏色。
我們常見的彩色圖像有兩種類型:RGB(光學(xué)原色)和CMYK(色彩原色)。RGB表示的是:紅,藍(lán),綠,,主要用于相機(jī),視頻等;CMYK表示的是:青,品紅,黃,黑,主要用于印刷行業(yè)
圖像視覺(jué)指標(biāo)
對(duì)比度:指不同顏色之間的差別。對(duì)比度=最大灰度值/最小灰度值
亮度:這個(gè)容易理解,就是讓圖像色彩更加鮮亮
銳度:即清晰度,它是反映圖像平面清晰度和圖像邊緣銳利程度的一個(gè)指標(biāo)
色度:色彩的純度,也叫飽和度或彩度
圖像處理基本原理
RGB模型
RGB色彩模式是工業(yè)界的一種顏色標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)幾乎包括了人類實(shí)例所能感知的所有顏色。通過(guò)上面這張圖就可以看出當(dāng)三個(gè)原色都不覆蓋的區(qū)域,就呈現(xiàn)出黑色,當(dāng)三個(gè)原色疊加起來(lái)中心最亮的疊區(qū)為白色的,所以在圖像處理過(guò)程中[0,0,0]表示的是黑色,[255,255,255]表示的是白色。
RGB的每個(gè)通道都有0-255共256級(jí)色彩,按這樣計(jì)算,整個(gè)RGB模型可以組合出256x256x256=16777216中色彩,通常也稱1600萬(wàn)色或者24位色(2的24次方)。說(shuō)到這里還有一種ARGB模型,也就是色彩模式加上Alpha(透明度)通道,常見于32位位圖的存儲(chǔ)結(jié)構(gòu)。
RGB模型的元神其實(shí)就是三維直角坐標(biāo)系中的一個(gè)單位立方體(圖中的每個(gè)點(diǎn)顯示的是RGB值不是坐標(biāo)),在正方體的主對(duì)角線上的RGB分量都相等,就會(huì)產(chǎn)生由暗到亮的黑白圖像,這便是灰度。(0,0,0)是黑色,對(duì)應(yīng)的RGB就是[0,0,0],(1,1,1)是白色,對(duì)應(yīng)的RGB就是[255,255,255]
灰度
表示圖像像素明暗程度的數(shù)值,也就是黑白圖像中點(diǎn)的顏色深度。范圍一般為0-255。白色為 255,黑色為0。
灰度化作用
處理圖像時(shí)候?yàn)槭裁匆然叶然?#xff1f;主要有兩個(gè)原因
1. RGB并不能反映圖像的形態(tài)特征,只是從光學(xué)的原理上進(jìn)行顏色的調(diào)配
2.減小圖像原始數(shù)據(jù)量,便于后續(xù)處理時(shí)計(jì)算量更少
灰度化的方法
常用的圖像灰度化有四種算法:分量法,最大值法,均值法,加權(quán)均值法
分量法
分量法就是用RGB三個(gè)分量的某一個(gè)分量作為該點(diǎn)的灰度值
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實(shí)現(xiàn)分量法
最大值法
最大值法就是將彩色圖像中的三分量亮度的最大值作為灰度圖的灰度值
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實(shí)現(xiàn)最大值法
均值法
均值法就是將彩色圖像中的三分量亮度求平均得到一個(gè)灰度圖
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實(shí)現(xiàn)均值法
加權(quán)均值法
加權(quán)均值法就是為每個(gè)通道加上一個(gè)權(quán)重,權(quán)重之和一定要等于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)
這里說(shuō)明一下,一般來(lái)說(shuō)有兩組比較常用的權(quán)重
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)
還有一個(gè)是從人體生理學(xué)角度所提出的一種權(quán)值(人眼對(duì)綠色的敏感最高,對(duì)藍(lán)色敏感最低)
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實(shí)現(xiàn)加權(quán)均值法
我們看看處理后的效果吧
完整代碼
我們先看原圖
轉(zhuǎn)灰度圖后的效果
從最終的效果來(lái)看,和原圖相比,用加權(quán)均值處理的的兩個(gè)灰度圖最清晰
二值化
二值化就是就是將整個(gè)圖像呈現(xiàn)出明顯的黑白效果的過(guò)程。
在數(shù)字圖像處理中,二值圖像占有非常重要的地位,圖像的二值化使圖像中數(shù)據(jù)量大為減少,從而能凸顯出目標(biāo)的輪廓,增加識(shí)別率,比如現(xiàn)在常見的OCR識(shí)別技術(shù)。
二值化原理
圖像二值化是在圖像灰度圖的基礎(chǔ)上按照閾值將256級(jí)的灰度圖的色調(diào)分割為0或者255,也就是圖像只有兩種顏色,非黑即白。
二值化方法
二值化常用的方法有全局二值化,局部二值化,局部自適應(yīng)二值化。
全局二值化就是設(shè)置一個(gè)全局的閾值,對(duì)圖像進(jìn)行二值化
局部二值化的方法就是按照一定的規(guī)則將整幅圖像劃分為N個(gè)窗口,對(duì)這N個(gè)窗口中的每一個(gè)窗口再按照一個(gè)統(tǒng)一的閾值T將該窗口內(nèi)的像素劃分為兩部分,進(jìn)行二值化處理
自適應(yīng)二值化就是在局部二值化的基礎(chǔ)之上,將閾值的設(shè)定更加合理化。該方法的閾值是通過(guò)對(duì)該窗口像素的平均值E,像素之間的差平方P,像素之間的均方根值Q等各種局部特征,設(shè)定一個(gè)參數(shù)方程進(jìn)行閾值的計(jì)算,例如:T=aE+bP+c*Q,其中a,b,c是自由參數(shù)。這樣得出來(lái)的二值化圖像就更能表現(xiàn)出二值化圖像中的細(xì)節(jié)
這里我就先介紹一個(gè)最簡(jiǎn)單的全局二值化
要想從多值的圖像中直接提取出目標(biāo)物體,最常用的方法就是設(shè)定一個(gè)全局的閾值T,用T將圖像的數(shù)據(jù)分成兩部分:大于T的像素群和小于T的像素群。將大于T的像素群的像素值設(shè)定為白色(或者黑色),小于T的像素群的像素值設(shè)定為黑色(或者白色)。
比如:計(jì)算每一個(gè)像素的(R+G+B)/3,如果大于我們?cè)O(shè)定的閾值,則設(shè)置該像素為白色,即R=G=B=255;否則設(shè)置為黑色,即R=G=B=0
為了計(jì)算方便,一般情況下我們都是先把圖片轉(zhuǎn)成灰度圖,再做二值化處理
二值化中的算法
二值化的算法常見的有膨脹算法、腐蝕算法,而這兩種算法的交互使用又形成了開運(yùn)算和閉運(yùn)算。這個(gè)暫時(shí)先了解一下吧,到后面我研究透了再另詳細(xì)的分析吧
閾值的選取
閾值在二值化處理過(guò)程中是一個(gè)核心參數(shù),那么閾值的選取也是二值化過(guò)程中的核心算法。
一般比較常見的有七種:Otsu(大律法)、最大熵、迭代法、自適應(yīng)閥值、手動(dòng)、迭代法、基本全局閾值法,且都已經(jīng)封裝在在opencv里了
我拿一個(gè)數(shù)字圖像做個(gè)簡(jiǎn)單的二值化處理吧
number.jpg import cv2def binary_deal(img,T):''':param T: 閾值設(shè)定: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先把圖片轉(zhuǎn)換成了灰度圖,然后通過(guò)全局閾值的方法進(jìn)行二值化處理,廢話不多說(shuō)直接看效果吧
binary.jpg圖像二值化處理的原理和算法我還沒(méi)研究透,就先分享點(diǎn)基礎(chǔ)的吧,隨后再簡(jiǎn)單提一下灰度化時(shí)候圖像失真的問(wèn)題吧
圖像失真問(wèn)題
我們?cè)谔幚韴D像時(shí)候因?yàn)椴捎玫氖钦偷腞GB值,這樣計(jì)算后會(huì)丟失掉小數(shù)點(diǎn)后面的部分,這樣就會(huì)導(dǎo)致圖像顏色值失真,計(jì)算過(guò)程越多,失真就越嚴(yán)重。
為了減少圖像失真,一般情況下會(huì)將RGB值轉(zhuǎn)為[0,1]之間的浮點(diǎn)數(shù)。
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倍,在處理時(shí)候,圖像失真情況也會(huì)得到很大的改善
總結(jié)
以上是生活随笔為你收集整理的小白入门计算机视觉(二) : 图像基本处理----灰度图和二值化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 盛世昊通上市美国纳斯达克,基建建设任重而
- 下一篇: 24.Odoo产品分析 (三) – 人力