1.自適應(yīng)閾值分割介紹
??在圖片處理過程中,針對(duì)鋪前進(jìn)行二值化等操作的時(shí)候,我們希望能夠?qū)D片相應(yīng)區(qū)域內(nèi)所有的信息提供保留。實(shí)驗(yàn)室環(huán)境下,相應(yīng)的素材是模板化的,但是將實(shí)驗(yàn)室方法應(yīng)用于現(xiàn)實(shí)環(huán)境中時(shí),我們會(huì)發(fā)現(xiàn)光影環(huán)境對(duì)于效果的影響其實(shí)是很大的。在這種情況下進(jìn)行處理,會(huì)使得結(jié)果不如人意:一塊黑,一塊白,且黑的區(qū)域的特征無法提取。這時(shí)候自適應(yīng)閾值算法尤為重要。與全局閾值不同,它更加注重上下文關(guān)系,將原本圖片分割成更小的區(qū)域進(jìn)行判斷,極大地降低了陰影對(duì)于圖片本身的影響。
??自適應(yīng)閾值用于二值化處理圖像,具有比較好的處理效果,相比對(duì)全閾值處理方法,自適應(yīng)閾值中的每一個(gè)像素點(diǎn)的閾值都不是固定相同的,而是由其領(lǐng)域中的圖像像素點(diǎn)加權(quán)平均計(jì)算而得到的,這樣的處理方法有如下好處:
1.每個(gè)像素位置處的二值化閾值不是固定不變的,而是由其周圍鄰域像素的分布來決定的。
2.亮度較高的圖像區(qū)域的二值化閾值通常會(huì)較高,而亮度較低的圖像區(qū)域的二值化閾值則會(huì)相適應(yīng)地變小。
3.不同亮度、對(duì)比度、紋理的局部圖像區(qū)域?qū)?huì)擁有相對(duì)應(yīng)的局部二值化閾值,這樣處理出的圖像效果更加明顯。
2.自適應(yīng)閾值函數(shù)參數(shù)解析
??在Opencv庫函數(shù)中,給出了自適應(yīng)閾值分割的函數(shù)如下所示:
fig1 = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
??接下來我將具體解釋adaptiveThreshold()中各個(gè)參數(shù)的意義,如下所示:
"""
fig=cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
參數(shù)解釋:
1.src:原圖像,就是你需要進(jìn)行自適應(yīng)閾值分割處理的圖像
2.maxValue:最大像素點(diǎn),其含義表示如果某點(diǎn)的像素值大于對(duì)應(yīng)的閾值,那么將像素值取為255.
3.adaptiveMethod:計(jì)算閾值的方法,Opencv中包括了兩種:1.cv.ADAPTIVE_THRESH_MEAN_C:計(jì)算出領(lǐng)域的平均值作為閾值。
2.DAPTIVE_THRESH_GAUSSIAN_C:計(jì)算出領(lǐng)域的高斯均值作為閾值。
4.thresholdType:取值類型,只有兩個(gè)取值:1.THRESH_BINARY 2.THRESH_BINARY_INV
5.blockSize:計(jì)算單位是像素的鄰域塊大小選擇,這是局部鄰域大小,只能取奇數(shù),如3/5/7/9/11等
6.C:閾值偏移量,正負(fù)數(shù)都可以,所以閾值的大小=C+adaptiveMethod計(jì)算出的閾值值
"""
3.高斯概率函數(shù)介紹
高斯分布是人工智能方面很常見的一種概率分布函數(shù),常見的一維高斯概率密度分布函數(shù)如下所示:
p
(
x
)
=
1
σ
2
π
e
?
(
x
?
μ
)
2
2
σ
2
p(x)=\frac1{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}
p(x)=σ2π?1?e?2σ2(x?μ)2?
在高斯分布函數(shù)中,我們可以隨意調(diào)節(jié)標(biāo)準(zhǔn)差
σ
\sigma
σ和
μ
\mu
μ的值,來進(jìn)行高斯分布的變換,如下所示:
在圖像處理中,我們一般用到二維的高斯概率分布函數(shù),如下所示:
f
(
x
,
y
)
=
(
2
π
σ
1
σ
2
1
?
ρ
2
)
?
1
e
x
p
[
?
1
2
(
1
?
ρ
2
)
(
(
x
?
μ
1
)
2
σ
1
2
?
2
ρ
(
x
?
μ
1
)
(
y
?
μ
2
)
σ
1
σ
2
+
(
y
?
μ
2
)
2
σ
2
2
)
]
f\left(x,y\right)=\left(2\pi\sigma_{1}\sigma_{2}\sqrt{1-\rho^{2}}\right)^{-1}exp\left[-\frac{1}{2\left(1-\rho^{2}\right)}\left(\frac{\left(x-\mu_{1}\right)^{2}}{\sigma_{1}^{2}}-\frac{2\rho\left(x-\mu_{1}\right)\left(y-\mu_{2}\right)}{\sigma_{1}\sigma_{2}}+\frac{\left(y-\mu_{2}\right)^{2}}{\sigma_{2}^{2}}\right)\right]
f(x,y)=(2πσ1?σ2?1?ρ2?)?1exp[?2(1?ρ2)1?(σ12?(x?μ1?)2??σ1?σ2?2ρ(x?μ1?)(y?μ2?)?+σ22?(y?μ2?)2?)]
當(dāng)我們令
σ
1
\sigma_{1}
σ1?=
σ
2
\sigma_{2}
σ2?=
σ
\sigma
σ,同時(shí)將
μ
\mu
μ和
ρ
\rho
ρ置為0,得出的高斯概率函數(shù)如下所示:
g
(
x
,
y
)
=
1
2
π
σ
2
e
?
(
x
2
+
y
2
)
2
σ
2
g(x,y)=\frac{1}{2\pi\sigma^2}e^{-\frac{(x^2+y^2)}{2\sigma^2}}
g(x,y)=2πσ21?e?2σ2(x2+y2)?
高斯概率函數(shù)是相對(duì)于二維坐標(biāo)產(chǎn)生的,其中(x,y)為點(diǎn)坐標(biāo),要得到一個(gè)高斯濾波器模板,應(yīng)先對(duì)高斯函數(shù)進(jìn)行離散化,將得到的值作為模板的系數(shù)。例如:要產(chǎn)生一個(gè)33的高斯濾波器模板,以模板的中心位置為坐標(biāo)原點(diǎn)進(jìn)行取樣,模板在各個(gè)位置的坐標(biāo),如下圖所示(x軸水平向右,y軸豎直向下)
標(biāo)準(zhǔn)差 σ =1.3 的 33 的整數(shù)形式的高斯濾波器如下:
K = 1 16 ? [ 1 2 1 2 4 2 1 2 1 ] K=\dfrac{1}{16}\cdot\begin{bmatrix}1&2&1\\2&4&2\\1&2&1\end{bmatrix} K=161?? ?121?242?121? ?
標(biāo)準(zhǔn)差σ的值可以任意選取,如果σ較小,那么生成的模板的中心系數(shù)較大,而周圍的系數(shù)較小,這樣對(duì)圖像的平滑效果就不是很明顯;反之,σ較大,則生成的模板的各個(gè)系數(shù)相差就不是很大,比較類似均值模板,對(duì)圖像的平滑效果比較明顯,不管選擇什么 σ值,我們構(gòu)建3*3高斯核的時(shí)候要確保這九個(gè)點(diǎn)加起來為1,從而得到最終的高斯模板。文章來源:http://www.zghlxwxcb.cn/news/detail-723065.html
4.自適應(yīng)閾值分割核心代碼
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負(fù)號(hào)
def adaptiveThreshold_test():
img = cv2.imread(r'C:\Users\Zeng Zhong Yan\Desktop\py.vs\Mechine Learning\lena.jpg',0)#讀入圖片
img = cv2.medianBlur(img, 5)#中值濾波來處理圖像
#圖像切割
#全圖像二值化/全局閾值法處理圖像
ret, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
#平均值計(jì)算閾值方法(cv2.ADAPTIVE_THRESH_MEAN_C)-偏移值
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
#高斯值計(jì)算閾值方法(cv2.ADAPTIVE_THRESH_GAUSSIAN_C)-偏移值
th3 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
#圖像可視化繪制
titles = [u'原始圖像', u'全局閾值處理圖像',u'自適應(yīng)平均閾值處理圖像', u'自適應(yīng)高斯閾值處理圖像']
images = [img, th1, th2, th3]
for i in range(4):
plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
if __name__ == '__main__':
adaptiveThreshold_test()
5.自適應(yīng)閾值分割效果展示
文章來源地址http://www.zghlxwxcb.cn/news/detail-723065.html
6.參考文章及致謝
本章內(nèi)容的完成離不開大佬文章的啟發(fā)和幫助,在這里列出名單,如果對(duì)于內(nèi)容還有不懂的,可以移步對(duì)應(yīng)的文章進(jìn)行進(jìn)一步的理解分析。
1.自適應(yīng)閾值圖像切割:https://blog.csdn.net/weixin_43977647/article/details/115354680?spm=1001.2014.3001.5502
如果大家這這篇blog中有什么不明白的可以去他的專欄里面看看,內(nèi)容非常全面,應(yīng)該能夠有比較好的解答。
在文章的最后再次表達(dá)由衷的感謝!!
到了這里,關(guān)于圖像處理與計(jì)算機(jī)視覺--第五章-圖像分割-自適應(yīng)閾值分割的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!