引入
一張圖像顯示在顯示屏上的時(shí)候,它斑斕多彩,輪廓分明(可你放的明明是張灰度圖!),而當(dāng)它被轉(zhuǎn)化到數(shù)字設(shè)備當(dāng)中的時(shí)候,我們看到的就將會(huì)是下面的情形:
是的,所有的色彩最后都會(huì)被變?yōu)橐粋€(gè)個(gè)數(shù)字,在0到255之間來(lái)回徘徊,在一個(gè)個(gè)矩陣中被圍困(突然詩(shī)意起來(lái))??梢赃@樣說(shuō),矩陣就是圖像在數(shù)碼設(shè)備中的表現(xiàn)形式。而正是因?yàn)樗麄冇蛇@些數(shù)字組成,才給了我們機(jī)會(huì)去用數(shù)字的方法來(lái)支配他們。
對(duì)于一張圖片,我們往往不會(huì)對(duì)每一個(gè)地方都相同地感興趣,總有一些特殊東西才是我們的目標(biāo)。將目標(biāo)區(qū)域和不想要的背景區(qū)域區(qū)分開我們就可以對(duì)這些數(shù)字下手。下面我們就說(shuō)道說(shuō)道二值化的那些事兒~
二值化
說(shuō)起二值化,我們可以先來(lái)看看二值圖像
二值圖像(Binary Image)是指圖像上的每一個(gè)像素只有兩種可能的取值或灰度等級(jí)狀態(tài)的圖像。通常來(lái)講就是我們常??匆?jiàn)的“非黑即白”的圖像,也就是說(shuō),圖像像素的灰度值無(wú)論在什么數(shù)據(jù)類型中都只有最大值和最小值兩種取值。這種圖像色彩類型少,可以進(jìn)行高度的壓縮,利于節(jié)省儲(chǔ)存空間。
相應(yīng)的,二值化就是把非二值圖像經(jīng)過(guò)計(jì)算變成二值圖像。
在openCV4中有threshold()和adaptiveThreshold()可以來(lái)實(shí)現(xiàn)圖像的二值化。
那么下面就先來(lái)介紹前一種啦
輸入輸出的圖像以及閾值和最大值大家都應(yīng)該和好理解,那么什么是二值化方法的標(biāo)志參數(shù)呢?
下面的表中大致就是可能會(huì)用的的一些標(biāo)志參數(shù)和它們的含義:
下圖是前五種方法做二值化之后的信號(hào)示意圖:
如同標(biāo)志參數(shù)的作用介紹中說(shuō)的,前五中標(biāo)志參數(shù)都需要人為地設(shè)定一個(gè)閾值,之后才能進(jìn)行二值化。人們進(jìn)行二值化的目的往往是為了把目標(biāo)物體和其他的東西分離開,形成圖像的分割,但是有的時(shí)候?yàn)榱朔謩e這兩者而設(shè)定的閾值往往不是那么簡(jiǎn)單就可以分得出來(lái)的,或者說(shuō),在對(duì)原始圖像的灰度值分布不是那么了解的情況下是很難設(shè)定到自己想要的那種閾值的。
于是就有了下面的兩個(gè)標(biāo)志參數(shù)可以用來(lái)獲取閾值:THRESH_OTSU(大津法)THRESH_TRIANGLE(三角形法)
問(wèn)
那么什么是大津法呢
百度百科教我的:大津法也就是最大類間方差法是由日本學(xué)者大津(Nobuyuki Otsu)于1979年提出的,是一種自適合于雙峰情況的自動(dòng)求取閾值的方法,簡(jiǎn)稱OTSU。它是按圖像的灰度特性,將圖像分成背景和目標(biāo)兩部分。背景和目標(biāo)之間的類間方差越大,說(shuō)明構(gòu)成圖像的兩部分的差別越大,當(dāng)部分目標(biāo)錯(cuò)分為背景或部分背景錯(cuò)分為目標(biāo)都會(huì)導(dǎo)致兩部分差別變小。因此,使類間方差最大的分割意味著錯(cuò)分概率最小。
這是某一張圖像的灰度直方圖,我們可以看到它其實(shí)很明顯地呈現(xiàn)出了適合利用大津法求閾值的雙峰情況(灰度大都集中在某兩個(gè)分離的區(qū)域之間),對(duì)某一假設(shè)的灰度值閾值將圖像的灰度值分成背景和目標(biāo)兩部分,計(jì)算兩組灰度值之間的類間方差,得到的方差值大致如圖中的紅色點(diǎn)所示。于是理所當(dāng)然的,方差最高點(diǎn)所對(duì)應(yīng)的灰度值正是我們能夠合理分開目標(biāo)和背景的閾值。
但是由于這兩種方法往往是基于全局閾值,當(dāng)圖像中有一部分過(guò)度曝光或者說(shuō)有陰影遮擋時(shí),用這樣的閾值選取方法就會(huì)顯得有點(diǎn)不太好。
比如說(shuō),當(dāng)你晚上寫下一篇英語(yǔ)作文,想要拍照上傳給老師批改,而在上傳到某掃描王軟件時(shí),往往就會(huì)發(fā)生這樣的事情:
于是我們就理所當(dāng)然地想:有沒(méi)有可以讓這整張圖中的字母大多數(shù)都能看清的方法呢?
很高興,有的!
我們就要用到adaptiveThreshold(),它可以幫助我們得到局部自適應(yīng)的閾值。(當(dāng)然,先把圖像分割,再用全局函數(shù)也不失為一種方法,不過(guò)相對(duì)比來(lái)說(shuō)還是直接用adaptiveThreshold()來(lái)得更加方便快捷。
adaptive_mean是均值法自適應(yīng)計(jì)算blockSize×blockSize鄰域內(nèi)的閾值,在這之后就可以進(jìn)行二值化了。
因?yàn)槭蔷植康拈撝?,所以就可以更加明確地在每一個(gè)地方都有比較好的區(qū)分,可以把大部分范圍內(nèi)的內(nèi)容都更好地分割開來(lái)。
編輯:jq
-
顯示屏
+關(guān)注
關(guān)注
28文章
4401瀏覽量
73743 -
二值圖像
+關(guān)注
關(guān)注
0文章
14瀏覽量
8701 -
OpenCV
+關(guān)注
關(guān)注
29文章
622瀏覽量
41091
原文標(biāo)題:科普 | 簡(jiǎn)單圖像處理:用用二值化吧!
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論