圖像處理與分析

一、照明與圖像

光通量(Φ 流明 lm):光通量指人眼所能感覺(jué)到的輻射功率,它等于單位時(shí)間內(nèi)某一波段的輻射能量和該波段的相對(duì)視見(jiàn)率的乘積。
輻照度(E 勒克斯 lux):輻照度指投射到一平表面上的輻射通量密度。指到達(dá)一表平面上,單位時(shí)間,單位面積上的輻射能。

1lux = 1 lm /m3

RGB與CMYK顏色模型

RGB:紅綠藍(lán)三原色
CMYK:品紅 黃 青 三補(bǔ)色


兩種顏色模型
HSI顏色模型
  • 色調(diào)H是描述純色的屬性(如紅色、黃色等)
  • 飽和度S表示的是一種純色被白光稀釋的程度的度量
  • 亮度體現(xiàn)了無(wú)色的光強(qiáng)度概念,是一個(gè)主觀(guān)的描述
HSI(HSV顏色模型)
OpenCV顏色空間轉(zhuǎn)換

dst = cv.cvtColor(src, dst, code)
*src:輸入
dst:輸出
code:色彩空間轉(zhuǎn)換模式

  • OpenCV中,彩色圖像缺省為BGR格式,顏色三通道順序?yàn)锽,G,R,分別對(duì)應(yīng)索引0,1,2
  • OpenCV中,HSI/HSV顏色空間中H的取值范圍是0-180,其他兩個(gè)是0-255
  • 兩個(gè)相似的概念:HSI和HSV空間。HSV里面的v指的是RGB里面的最大的值,v=max(r,g,b);而HSI的是平均值,l=(r+g+b)/3;另外兩個(gè)分量應(yīng)該是一樣的

二、圖像平滑濾波

圖像的卷積
  • 圖像濾波由卷積定義:( f * g ) ( x , y ) = \frac {1}{NM} \sum _ { i = 0 } ^ { N - 1 } \sum _ { j = 0 } ^ { M - 1 } f ( i , j ) g ( x - i , y - j )
  • 若濾波器對(duì)稱(chēng):( f * g ) ( x , y ) = \frac {1}{NM} \sum _ { i = 0 } ^ { N - 1 } \sum _ { j = 0 } ^ { M - 1 } f ( i , j ) g ( x + i , y + j )
  • 圖像卷積操作,由卷積核逐點(diǎn)乘積后累加得到
  • 圖像卷積操作需要事先將濾波器上下左右反轉(zhuǎn)再計(jì)算
4-鄰域 8-鄰域

平均濾波
  • 在一個(gè)小區(qū)域內(nèi)像素值平均:g(x,y) = \frac{1}{M} \sum_{i,j}f(i,j)
    \frac {1} {5} \left[ \begin{array} { c c c } { 0 } & { 1 } & { 0 } \\ { 1 } & { 1 } & { 1 } \\ { 0 } & { 1 } & { 0 } \end{array} \right] \quad \frac {1} {8} \left[ \begin{array} { c c c } { 1 } & { 1 } & { 1 } \\ { 1 } & { 0 } & { 1 } \\ { 1 } & { 1 } & { 1 } \end{array} \right] \quad \frac {1} {9} \left[ \begin{array} { c c c } { 1 } & { 1 } & { 1 } \\ { 1 } & { 1 } & { 1 } \\ { 1 } & { 1 } & { 1 } \end{array} \right]

使圖像邊緣變得平滑,損失了圖像的細(xì)節(jié),核越大,圖像越模糊,對(duì)椒鹽噪聲效果不佳


加權(quán)平均濾波
  • 在一個(gè)小區(qū)域內(nèi)像素值加權(quán)平均:g(x,y) = \sum_{i,j} w_{ij}f(i,j)
    \frac {1}{10} \left[ \begin{array}{ccc} 1&1&1 \\ 1&2&1 \\ 1&1&1 \end{array} \right] \quad \frac {1}{16} \left[ \begin{array}{ccc} 1&2&1 \\ 2&4&2 \\ 1&2&1 \end{array} \right]

高斯濾波:根據(jù)像素位置賦不同的權(quán)值,臨近的像素具有更高的重要度

高斯濾波

使圖像邊緣變得平滑的同時(shí)不損失圖像的細(xì)節(jié),應(yīng)用廣泛


雙邊濾波
  • 權(quán)值同時(shí)與像素位置和灰度值有關(guān)
    g(x,y) = \frac {\sum_{k,l} f_{k,l} w_{x, y, k, l }} {\sum_{ k, l } w_{x, y, k, l}}
    其中\begin{aligned} w_{x,y,k,l} &= exp(- \frac {(x -k)^2+(y-l)^2}{2 {\sigma_d}^2} - \frac {||f(x,y) - f(k, l)||^2}{2 {\sigma_r}^2}) \\ &= { { d_{x, y, k, l } } \cdot { r_{x, y, k, l }} } \end{aligned}
    d,r分別為空域核(高斯核)和值域核(類(lèi)階躍高斯核){d_{x, y, k, l }} = exp(- \frac {(x -k)^2+(y-l)^2}{2 {\sigma_d}^2 }) , { r_{x, y, k, l }} = exp(\frac {||f(x,y) - f(k, l)||^2}{2 {\sigma_r}^2} )
    雙邊濾波

中值濾波
  • 確定窗口及位置(含有奇數(shù)個(gè)像素)
  • 窗口內(nèi)像素按灰度大小排序
  • 取中間值代替原窗口中心像素值

對(duì)孤立噪聲特別有效,核越大圖像越模糊,核必須是奇數(shù)


三、數(shù)學(xué)形態(tài)學(xué)濾波

膨脹

A \oplus B = \bigcup _ { b \in B } ( A ) _ { b }

膨脹操作

腐蝕

A \ominus B = \bigcap _ { b \in B } ( A ) _ { - b }

腐蝕操作

腐蝕與膨脹

腐蝕:灰度值大的變?。▓D像變暗)
膨脹:灰度值大的變大(圖像變亮)
膨脹腐蝕都會(huì)使圖像顆?;?/p>

開(kāi)閉運(yùn)算

開(kāi)運(yùn)算:先腐蝕后膨脹
A \circ B = ( A \ominus B ) \oplus B
閉運(yùn)算:先膨脹后腐蝕
A \cdot B = ( A \oplus B ) \ominus B

先開(kāi)后閉:可有效去除噪聲

開(kāi)閉運(yùn)算
OpenCV 圖像濾波
濾波函數(shù)

dst = cv2.filter2D(src , ddepth, kernel, dst, anchor, delta, borderType)
src:輸入圖像
ddepth:目標(biāo)圖像的所需深度,包括CV_16S/CV_32F/CV_64F等
kernel:卷積核(或相當(dāng)于相關(guān)核),單通道浮點(diǎn)矩陣;如果要將不同的內(nèi)核應(yīng)用于不同的通道,請(qǐng)使用拆分將圖像拆分為單獨(dú)的顏色平面,然后單獨(dú)處理它們
dst:輸出圖像,與輸入圖像尺寸和通道數(shù)相同
anchor:內(nèi)核的錨點(diǎn),指示內(nèi)核中過(guò)濾點(diǎn)的相對(duì)位置;錨應(yīng)位于內(nèi)核中;默認(rèn)值(-1,-1) 表示錨位于內(nèi)核中心
delta:在將它們存儲(chǔ)在dst中之前,將可選值添加到已過(guò)濾的像素中。類(lèi)似于偏置
borderType:卷積填充方式,包括BORDER_CONSTANT, BORDER_REPLICATE, BORDER_REFLECT 等

常用濾波函數(shù)
  • 平均濾波
    dst=cv2.blur(src,ksizel,dst,anchor,borderType)
  • 高斯平滑濾波
    dst=cv2.GaussianBlur(src,ksize,sigmaX,dst,sigmaY,borderType)
  • 中值濾波
    dst=cv2.medianBlur(src,ksizeL,dst)
參數(shù) 描述
ksize 濾波器大小,如(5,5)
  • 雙邊濾波
    dst=cv2. bilateralFilter(src, d, sigmaColor, sigmaSpace, dst, borderType)
參數(shù) 描述
src 原始圖像:8-bit或floating-point,1-channel或3-channel
dst 目標(biāo)圖像:size和type與原始圖像相同
d 過(guò)濾期間使用的各像素鄰域的直徑
sigmacolor 色彩空間的sigma參數(shù),該參數(shù)較大時(shí),各像素鄰域內(nèi)相距較遠(yuǎn)的顏色會(huì)被混合到一起,從而造成更大范圍的半相等顏色
sigmaSpace 坐標(biāo)空間的sigma參數(shù),該參數(shù)較大時(shí),只要顏色相近,越遠(yuǎn)的像素會(huì)相互影響
borderType 卷積填充方式,包括BORDER_CONSTANT,BORDERREPLICATE, BORDER_REFLECT等
原圖——————————均值濾波——————————高斯濾波——————————中值濾波——————————雙邊濾波

四、邊緣檢測(cè)

計(jì)算過(guò)程
  • 1.使用相應(yīng)邊緣檢測(cè)濾波器(如果是卷積核需要進(jìn)行上下左右翻轉(zhuǎn));
  • 2.進(jìn)行卷積運(yùn)算計(jì)算邊緣檢測(cè)結(jié)果
基本算子
  • Robert算子卷積核
  • Sobel 算子卷積核(常用)
  • Laplace算子
  • LoG算子
  1. 邊緣檢測(cè)即圖像差分
  2. 常見(jiàn)邊緣檢測(cè)算子包括Robert算子,Sobel算子,LoG 算子等,其中Sobel算子最為常用
  3. 二維圖像的邊緣具有強(qiáng)度和方向兩個(gè)性質(zhì)
  • Canny算子
    優(yōu)點(diǎn):邊緣可自動(dòng)連通
  • 算法步驟:
    1.平滑圖像
  • 使用高斯函數(shù)完成平滑,以 5×5 為例
    \begin{aligned} G(x,y) &= \frac {1} { \sqrt{2\pi} \sigma }{ exp \left[ { - \frac{x^2 + y^2 }{ \sigma^2 }} \right]} \\ K &= \frac {1} {139} \left[ \begin{array} { c c c c c} { 2 } & { 4 } & { 5 } &{ 4 } &{ 2 }\\ { 4 } & { 9 } & { 12 } &{ 9 } &{ 4 } \\ { 5 } & { 12 } & { 15 } &{ 12 } &{ 9 }\\ { 4 } & { 9 } & { 12 } &{ 9 } &{ 4 }\\ { 2 } & { 4 } & { 5 } &{ 4 } &{ 2 } \end{array} \right] \end{aligned}

2.計(jì)算梯度(幅值和方向)

  • 使用Sobel邊緣檢測(cè)算子對(duì)平滑圖像進(jìn)行xy方向的邊緣檢測(cè),假設(shè)得到結(jié)果分別為E_{x},E_{y}
  • 進(jìn)一步計(jì)算梯度幅值和方向:
    \begin{aligned} M ( x , y ) &= \sqrt { E _ { x } ^ { 2 } ( x , y ) + E _ { y } ^ { 2 } ( x , y ) } \\ \theta ( x , y ) &= \tan ^ { - 1 } \left( \frac { E _ { y } ( x , y ) } { E _ { x } ( x , y ) } \right) \end{aligned}
  • 方向離散化

3.梯度幅值進(jìn)行非極大值抑制

細(xì)化梯度幅值圖像中的屋脊帶,只保留幅值局部變化最大的點(diǎn)

4.自動(dòng)邊緣連接

  • 對(duì)上一步得到的圖像使用低、高閾值\tau_1 \tau_2閾值化,得到三幅圖像
    \left\{ \begin{array} \\{ T _ { 1 } [ i , j ] \left( M ( i , j ) < \tau _ { 1 } \right) } \\ { T _ { 2 } [ i , j ] \left( \tau _ { 1 } \leq M ( i , j ) \leq \tau _ { 2 } \right) } \\ { T _ { 3 } [ i , j ] \left( M ( i , j ) > \tau _ { 2 } \right) } \end{array} \right.
    T_1對(duì)應(yīng)假邊緣,去除
    T_2對(duì)應(yīng)真邊緣,全部保留
    T_3連接:臨接像素中是否有屬于T_3的像素
  • 通過(guò)查看弱邊緣像素及其8個(gè)鄰域像素,只要其中一個(gè)為強(qiáng) 邊緣像素,則該弱邊緣點(diǎn)就可以保留為真實(shí)的邊緣。

數(shù)學(xué)形態(tài)學(xué)邊緣檢測(cè)


  • 邊緣梯度(gradient)
    定義:灰度膨脹圖像與灰度腐蝕圖像的差值

r = ( A \oplus B ) - ( A \ominus B )


  • 頂帽與黑帽變換

頂帽變換(tophat)定義為圖像與其開(kāi)運(yùn)算的差值:
r = A -(A \circ B)
黑帽變換(blackhat)定義為圖像閉運(yùn)算與自身的差值:
r = (A \cdot B) - A

原圖
頂帽變換 底帽變換

頂帽變換和底帽變換的結(jié)合使用能夠應(yīng)用于灰度圖像的對(duì)比度增強(qiáng)
常用做法:將源圖像加上頂帽變換再減去底帽變換 →增強(qiáng)對(duì)比度


  • 擊中或擊不中變換(HMT)
    輸出圖像由所有在B_1中匹配的像素(擊中)和未在B_2中匹配的像素(擊不中)組成

r = A ? B = \left( A \ominus B _ { 1 } \right) \cap \left( A ^ { c } \ominus B _ { 2 } \right)

OpenCV實(shí)現(xiàn)邊緣檢測(cè)
  • Sobel算子邊緣檢測(cè)
    dst = cv2.Sobel(src , ddepth , dx , dy [, dst [, ksize [, scale [, delta [, borderType ]]]]] )
  • Laplace算子
    dst = cv2.Laplacian( src , ddepth [, dst [, ksize [, scale [, delta [, borderType ]]]]] )
  • Canny算子
    dst = cv2.Canny( image , threshold1 , threshold2 [, edges [, apertureSize [, L2gradient ]]] )
參數(shù) 描述
ddepth 目標(biāo)圖像的所需深度,包括CV_16S/CV_32F/CV_64F等
ksize 濾波器大小,通??蛇x為(5,5)或(3,3),或直接使用缺省
  • 形態(tài)學(xué)濾波
    dst = cv2.morphologyEx( src , op , kernel [, dst [, anchor [, iterations [, borderType [, borderValue ]]]]] )
參數(shù) 描述
src 原圖像
op 形態(tài)學(xué)操作,包括MORPH_ERODE, MORPH_DILATE, MORPH_OPEN, MORPH_CLOSE,MORPH_GRADIENT, MORPH_TOPHAT, MORPH_BLACKHAT, MORPH_HITMISS
kernel 濾波結(jié)構(gòu)元素,參見(jiàn)getStructuringElement
iterations 進(jìn)行操作的次數(shù)

dst = cv2.getStructuringElement(shape , ksize [, anchor ] )
這個(gè)函數(shù)的第一個(gè)參數(shù)表示內(nèi)核的形狀,有三種形狀可以選擇。
矩形:MORPH_RECT;
交叉形:MORPH_CROSS;
橢圓形:MORPH_ELLIPSE;

1.OpenCV提供了Sobel,Canny等函數(shù)用于邊緣檢測(cè)
2. OpenCV提供了MorphologyEx函數(shù)用于形態(tài)學(xué)濾波


五、圖像變換

常見(jiàn)幾何變換
  • 放縮
  • 平移
  • 旋轉(zhuǎn)
  • 鏡像
距離變換
  • 通常作用于二值圖像上,描述的是該位置像素點(diǎn)到最近的區(qū)域邊界的距離。如果假設(shè)背景為黑(對(duì)應(yīng)值為0),則為到最近0值的距離
距離變換
對(duì)數(shù)極坐標(biāo)變換(Log-Polar變換)
  • 將圖像像素坐標(biāo)轉(zhuǎn)換為極坐標(biāo),然后對(duì)距離取對(duì)數(shù)
    變換公式:\left\{ \begin{aligned} r = \sqrt { x ^ { 2 } + y ^ { 2 } } , \rho & = \log ( r ) \\ \theta = \arctan \frac { y } { x } \end{aligned} \right.
    反變換公式:\left\{ \begin{aligned} x &= rcos(\theta ) \\ y &= rsin( \theta ) \end{aligned} \right.
Log-Polar變換

Log-Polar變換應(yīng)用:全景展開(kāi)

六、灰度直方圖

灰度直方圖是關(guān)于灰度級(jí)分布的函數(shù),是對(duì)圖像中灰度級(jí)分布的統(tǒng)計(jì)?;叶戎狈綀D是將數(shù)字圖像中的所有像素,按照灰度值的大小,統(tǒng)計(jì)其出現(xiàn)的頻率?;叶戎狈綀D是灰度級(jí)的函數(shù),它表示圖像中具有某種灰度級(jí)的像素的個(gè)數(shù),反映了圖像中某種灰度出現(xiàn)的頻率。通過(guò)直方圖可判斷圖像曝光及對(duì)比度等情況 .


灰度直方圖對(duì)圖像照明特征的反映

越集中對(duì)比度越低

直方圖均衡化
  • 直方圖均衡化的作用就是圖像增強(qiáng)
    需要滿(mǎn)足條件:亮的依然亮,暗的依然暗。
  • 直方圖映射方法:
    s _ { k } = \sum _ { j = 0 } ^ { k } \frac { n _ { j } } { n } , k = 0,1,2 , \cdots , L - 1
局部直方圖均衡化
  • 在圖像的一個(gè)小鄰域內(nèi)使用直方圖均衡化,直方圖均衡可增加圖像對(duì)比度
    缺點(diǎn):在照度正常區(qū)域?qū)?duì)比度拉大容易出現(xiàn)明暗相間條紋
利用局部直方圖統(tǒng)計(jì)進(jìn)行灰度增強(qiáng)
  • 在圖像的每個(gè)小鄰域內(nèi),計(jì)算局部直方圖,進(jìn)而計(jì)算灰度和方差;
  • 根據(jù)需求,對(duì)圖像的亮部或暗部進(jìn)行增強(qiáng)。如前例需對(duì)暗部增強(qiáng),
    (1)計(jì)算局部均值m,與全局均值m,如m_l≤k_0m,則認(rèn)為該點(diǎn)是候選點(diǎn)
    (2)進(jìn)一步計(jì)算局部方差\sigma_l與全局方差\sigma,如k_1 ≤ k_2 \sigma,且k_1 \sigma ≤ \sigma_l,k_1<k_2(對(duì)標(biāo)準(zhǔn)差為0的區(qū)域不增強(qiáng)),則滿(mǎn)足增強(qiáng)條件
    (3)對(duì)同時(shí)滿(mǎn)足(1),(2)條件的點(diǎn)進(jìn)行增強(qiáng):
    g(x,y) = E \cdot f(x,y)

七、霍夫(Hough)變換

  • 功能:確定圖像中哪些點(diǎn)對(duì)應(yīng)一條直線(xiàn)
  • 核心思想:將原坐標(biāo)(x,y)轉(zhuǎn)換到參數(shù)空間中表示,進(jìn)一步利用投票機(jī)制解決魯棒性問(wèn)題。
  • 直線(xiàn)方程表達(dá):
    (1)斜率/截距:y=kx+b每一條直線(xiàn)對(duì)應(yīng)一個(gè)k,b
    (2)法線(xiàn)式:xcos \theta+ysin \theta= \rho
  • 直角坐標(biāo)系的一點(diǎn)(x_0,y_0),對(duì)應(yīng)參數(shù)空間(\theta,\rho)中一條近似正弦曲線(xiàn):
    x _ { 0 } \cos \theta + y _ { 0 } \sin \theta = \rho \Rightarrow \rho = \sqrt { x _ { 0 } ^ { 2 } + y _ { 0 } ^ { 2 } } \cos ( \theta + \phi )
  • 同一條直線(xiàn)上的多個(gè)點(diǎn),在(\theta,\rho)空間中必相交于一點(diǎn)
    Hough變換
Hough變換步驟
  • (\theta,\rho)空間量化成許多小格
  • 根據(jù)x-y平面每一個(gè)點(diǎn)代入\theta的量化值,算出各個(gè)\rho
  • 將對(duì)應(yīng)格計(jì)數(shù)累加
  • 當(dāng)全部點(diǎn)變換后,對(duì)小格進(jìn)行檢驗(yàn)(投票機(jī)制)。設(shè)置累計(jì)閾值T,計(jì)數(shù)器大于T的小格對(duì)應(yīng)于共線(xiàn)點(diǎn),其可以用作直線(xiàn)擬合參數(shù)。小于T的反映非共線(xiàn)點(diǎn),丟棄不用
圖像變換OpenCV函數(shù)
  • 距離變換
dst  =   cv.distanceTransform(  src, distanceType ,  maskSize [ , dst [,  dstType ]]   ) 
參數(shù) 功能
distanceType 距離計(jì)算方式,DIST_L1, DIST_L2DIST_C
maskSize 掩模尺寸,可取DIST_MASK_PRECISEDIST_MASK_3,5
  • Log-polar變換
dst  =   cv.logPolar(  src ,  center ,  M ,  flags [, dst] )
參數(shù) 功能
center 變換中心點(diǎn)
M 幅值尺度參數(shù)
flags 標(biāo)志位,是插值方法和下面選項(xiàng)的組合:CV_WARP_FILL_OUTLIERS 填充目標(biāo)圖像中的所 有像素;CV_WARP_INVERSE_MAP 表示矩陣是從目標(biāo)圖像到源圖像的反變換
  • 計(jì)算直方圖
  matplotlib.pyplot.hist( x, bins=None, range=None,  ...) 
參數(shù) 功能
bins 多少個(gè)柱
range 顯示的范圍
  • 直方圖均衡化
dst  =   cv.equalizeHist(  src  [, dst] )
  • 標(biāo)準(zhǔn)Hough變換
lines  = cv.HoughLines(  image ,  rho ,  theta ,  threshold [,  lines [,  srn [,  stn [,  min_theta [,  max_theta ]]]]] ) 
參數(shù) 功能
image 輸入圖像,應(yīng)為二值圖像,通常使用邊緣檢測(cè)結(jié)果;
rho 線(xiàn)段以像素為單位的距離精度,double類(lèi)型的,推薦用1.0
theta 線(xiàn)段以弧度為單位的角度精度,推薦用numpy.pi/180
threshod 累加平面的閾值參數(shù),int類(lèi)型,超過(guò)設(shè)定閾值才被檢測(cè)出線(xiàn)段,值越大,基本上意味著檢出的線(xiàn) 段越長(zhǎng),檢出的線(xiàn)段個(gè)數(shù)越少
  • 累計(jì)概率Hough變換
lines  = cv.HoughLinesP(  image ,  rho ,  theta ,  threshold [,  lines [,  minLineLength [,  maxLineGap ]]] ) 

效果更好,能檢測(cè)大部分的直線(xiàn)線(xiàn)條!

八、圖像分割

  • 目標(biāo):將圖像劃分為不同區(qū)域
  1. 圖像分割是中層視覺(jué)的重要內(nèi)容,具有廣泛應(yīng)用
  2. 圖像分割的主要方法包括閾值法、區(qū)域法等
  3. 圖像標(biāo)記為分割后的結(jié)果打上不同標(biāo)簽,便于后續(xù)處理
灰度閾值分割
  • 假設(shè):圖像中的目標(biāo)區(qū)和背景區(qū)之間或者不同目 標(biāo)區(qū)之間,灰度存在明顯差異


    Example
  • 凡是灰度值包含于z的像素都變成某一灰度值,其 他的變成另一個(gè)灰度值,則該圖像就以z為界被分成兩個(gè)區(qū)域
    f ( x , y ) = \left\{ \begin{array} { l l } { z _ { a } } & { f ( x , y ) \in z } \\ { z _ { b } } & {其他} \end{array} \right.

  • 特殊的,如果=1和=0,分割后的圖像為二值圖像

自動(dòng)閾值分割

自動(dòng)確定最佳閾值,使背景和目標(biāo)之間的差異 最大

  • 大津(Otsu)算法原理I
    根據(jù)統(tǒng)計(jì)分析理論,最佳閾值確定的最佳二分類(lèi)應(yīng)使類(lèi)內(nèi)方差最小,等同于類(lèi)間方差最大
    大津算法基本思想:確定使灰度直方圖類(lèi)間方差最大的最佳閾值假設(shè)灰度直方圖已經(jīng)歸一化,即
    p_i = \frac{n_i} {N}, \sum p_i = 1
  • 假設(shè)閾值T將像素灰度劃為兩類(lèi):C_0C_1,則每一類(lèi)出現(xiàn)的概率:
    \omega_0 = \sum_{i=1}^{T} { \frac {ip_i} {\omega_0} } = \frac{ \mu_{0}^{'} }{ \omega_0 }
    \mu_1 = \sum_{ i = T + 1}^{N} {\frac {ip_i} {\omega_1} } = \frac{\mu_{1}^{'} }{ \omega_{1} } = \frac{\mu - \mu_{0}^{'} }{1-\omega_0}
    其中 \mu = \sum_{i=1}^{N} ip_i。顯然有\omega_0 \mu_0 + \omega_1 \mu_1 = \mu
  • 兩類(lèi)的類(lèi)內(nèi)方差:
    \sigma _ { 0 } ^ { 2 } = \sum _ { i = 1 } ^ { T } \left( i - \mu _ { 0 } \right) ^ { 2 } p _ { i } / \omega _ { 0 } , \sigma _ { 1 } ^ { 2 } = \sum _ { i = T + 1 } ^ { N } \left( i - \mu _ { 1 } \right) ^ { 2 } p _ { i } / \omega _ { 1 }
    對(duì)應(yīng)的類(lèi)間方差:
    \sigma _ { B } ^ { 2 } = \omega _ { 0 } \left( \mu _ { 0 } - \mu \right) ^ { 2 } + \omega _ { 1 } \left( \mu _ { 1 } - \mu \right) ^ { 2 } = \omega _ { 0 } \omega _ { 1 } \left( \mu _ { 1 } - \mu _ { 0 } \right) ^ { 2 }
  • 顯然,\omega_B是關(guān)于最佳閾值r的隱函數(shù),應(yīng)選取T
    T = \underset { 1 \leq T < L } { \operatorname { argmax } } \sigma _ { B } ^ { 2 }
  • 大津算法是常用的一類(lèi)灰度閾值自動(dòng)選取方式,目標(biāo)是令類(lèi)間方差最大
  • 大津算法求解采用遍歷方式,思想直接,實(shí)現(xiàn)速度快。
OpenCV邊緣輪廓分割

image , contours , hierarchy = cv.findContours( image, mode, method [, contours [, hierarchy [,offset ]]])

參數(shù) 含義
image 單通道圖像矩陣,可以是灰度圖,但更常用的是經(jīng)過(guò)邊緣檢測(cè)算子處理后的二值圖像
contours 定義為vector<vector<Point>>contours,是一個(gè)輪廓列表
hierarchy 存在嵌套輪廓時(shí),分別為第i個(gè)輪廓的后一個(gè)輪廓、前一個(gè)輪廓、父輪廓、內(nèi)嵌輪廓的索引編號(hào)
mode 定義輪廓的檢索模式, 包括CV_RETR_EXTERNAL只檢測(cè)最外圍輪廓,CV_RETR_LIST檢測(cè)所有輪廓,但不建立等級(jí)關(guān)系等
method 包括CV_CHAIN_APPROX_SIMPLE 僅保存輪廓的拐點(diǎn)信息,把所有輪廓拐點(diǎn)處的點(diǎn)保存入contours
offset 所有的輪廓信息相對(duì)于原始圖像對(duì)應(yīng)點(diǎn)的偏移量, 缺省不設(shè)置

局部閾值分割
  • 全局閾值法存在的問(wèn)題


    分割效果不佳

    局部閾值分割

    局部閾值分割效果

多閾值分割
多閾值分割

1. 局部閾值法可有效解決照明不均的問(wèn)題
2. 多閾值法是二值化分割方法的擴(kuò)展,可解決多值目標(biāo) 的分割問(wèn)題


區(qū)域生長(zhǎng)法分割
  • 大津算法的局限性
    對(duì)于漸變的圖像分割效果不佳

區(qū)域生長(zhǎng)法:從種子點(diǎn)開(kāi)始,按照一定準(zhǔn)則(如 相鄰像素灰度相似性)向周?chē)鷶U(kuò)散 ,將鄰域相似像素加入?yún)^(qū)域中

區(qū)域生長(zhǎng)實(shí)現(xiàn)步驟:

  1. 對(duì)圖像順序掃描。找到第1個(gè)還沒(méi)有歸屬的像素, 設(shè)該像素為(x_0, y_0);
  2. (x0, y0)為中心, 考慮(x_0, y_0)的8鄰域像素(x, y),如果(x, y)滿(mǎn)足生長(zhǎng) 準(zhǔn)則, 將(x, y)(x_0, y_0)合并, 同時(shí)將(x, y)壓入堆棧;
  3. 從堆棧中取出一個(gè)像素, 把它當(dāng)作(x_0, y_0)返回到步驟2;
  4. 當(dāng)堆棧為空時(shí),返回到步驟1;
  5. 重復(fù)步驟1 - 4直到圖像中的每個(gè)點(diǎn)都有歸屬時(shí)。生長(zhǎng)結(jié)束。

圖像分裂
圖像分裂
  • 對(duì)區(qū)域分裂合并法無(wú)需預(yù)先指定種子點(diǎn),它按某種一致性準(zhǔn)則分裂 或者合并區(qū)域。
  • 可以先進(jìn)行分裂運(yùn)算,然后再進(jìn)行合并運(yùn)算;也可以分裂和合并運(yùn)算 同時(shí)進(jìn)行,經(jīng)過(guò)連續(xù)的分裂和合并,最后得到圖像的精確分割效果。
  • 分裂合并法對(duì)分割復(fù)雜的場(chǎng)景圖像比較有效。

1. 區(qū)域生長(zhǎng)法基于相鄰像素間的相似性,由種子像素逐 步生長(zhǎng)得到
2. 分裂-合并基于圖像塊內(nèi)在的相似性,通過(guò)不斷分裂得 到區(qū)域外邊界,通過(guò)合并將不同塊連接


分水嶺分割
分水嶺分割
  • 如果以圖像位置(x,y)為坐標(biāo),則圖像f(x,y)可以看作是地形俯視圖,其中“山峰的高度”與圖像中的 灰度值對(duì)應(yīng)。
  • 假設(shè)在每個(gè)“盆地”的最低點(diǎn)開(kāi)始打洞讓水漫上來(lái),并且讓水以均勻速率上升。那么,當(dāng)不同“盆地”的水開(kāi) 始匯聚時(shí),能通過(guò)修建一個(gè)“水壩”擋住這種聚合的弧線(xiàn)就是圖像的分界線(xiàn)

漫水原則

局部極小值點(diǎn):該點(diǎn)對(duì)應(yīng)一個(gè)盆地的最低點(diǎn),當(dāng)我們?cè)谂璧氐我坏嗡臅r(shí)候,由于重力作用,水最終會(huì)匯聚到該點(diǎn)。注意:可能存在一個(gè)最小值面,該平面內(nèi)的都是最小值點(diǎn)。
盆地的其它位置點(diǎn):該位置滴的水滴會(huì)匯聚到局部最小點(diǎn)。
盆地的邊緣點(diǎn):是該盆地和其它盆地交接點(diǎn),在該點(diǎn)滴一滴水,會(huì)等概率的流向任何一個(gè)盆地。

分水嶺算法的過(guò)分割問(wèn)題

由于噪聲點(diǎn)或者其它干擾因素的存在,使用分水嶺算法常常存在過(guò)度分 割的現(xiàn)象,這是因?yàn)楹芏嗪苄〉木植繕O值點(diǎn)的存在


分水嶺算法的過(guò)分割問(wèn)題

在初始時(shí)給marker,改善過(guò)分割問(wèn)題,為了解決過(guò)度分割的問(wèn)題,可以使用基于標(biāo)記(mark)圖像的分水嶺算法,就是指定mark 圖像,在這個(gè)區(qū)域的洪水淹沒(méi)過(guò)程中,水平面都是從定義的marker開(kāi)始的,這樣可以避 免一些很小的噪聲極值區(qū)域的分割。

加入Marker改善后的分割結(jié)果

Opencv實(shí)現(xiàn)

區(qū)域生長(zhǎng)法:retval , image , mask , rect = cv.floodFill( image , mask , seedPoint , newVal [, loDiff [, upDiff [, flags]]] )
分水嶺算法:markers = cv.watershed( image, markers #marker種子點(diǎn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容