圖像處理與分析

一管闷、照明與圖像

光通量(Φ 流明 lm):光通量指人眼所能感覺到的輻射功率套媚,它等于單位時間內(nèi)某一波段的輻射能量和該波段的相對視見率的乘積仪或。
輻照度(E 勒克斯 lux):輻照度指投射到一平表面上的輻射通量密度宗侦。指到達一表平面上颖系,單位時間嗅剖,單位面積上的輻射能。

1lux = 1 lm /m3

RGB與CMYK顏色模型

RGB:紅綠藍三原色
CMYK:品紅 黃 青 三補色


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

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

  • OpenCV中,彩色圖像缺省為BGR格式趁啸,顏色三通道順序為B强缘,G,R不傅,分別對應(yīng)索引0旅掂,1,2
  • OpenCV中访娶,HSI/HSV顏色空間中H的取值范圍是0-180商虐,其他兩個是0-255
  • 兩個相似的概念:HSI和HSV空間。HSV里面的v指的是RGB里面的最大的值崖疤,v=max(r秘车,g,b)劫哼;而HSI的是平均值叮趴,l=(r+g+b)/3;另外兩個分量應(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 )
  • 若濾波器對稱:( 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 )
  • 圖像卷積操作眯亦,由卷積核逐點乘積后累加得到
  • 圖像卷積操作需要事先將濾波器上下左右反轉(zhuǎn)再計算
4-鄰域 8-鄰域

平均濾波
  • 在一個小區(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]

使圖像邊緣變得平滑伤溉,損失了圖像的細節(jié),核越大妻率,圖像越模糊乱顾,對椒鹽噪聲效果不佳


加權(quán)平均濾波
  • 在一個小區(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)值,臨近的像素具有更高的重要度

高斯濾波

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


雙邊濾波
  • 權(quán)值同時與像素位置和灰度值有關(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分別為空域核(高斯核)和值域核(類階躍高斯核){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ù)個像素)
  • 窗口內(nèi)像素按灰度大小排序
  • 取中間值代替原窗口中心像素值

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


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

膨脹

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

膨脹操作

腐蝕

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

腐蝕操作

腐蝕與膨脹

腐蝕:灰度值大的變小(圖像變暗)
膨脹:灰度值大的變大(圖像變亮)
膨脹腐蝕都會使圖像顆粮镂化

開閉運算

開運算:先腐蝕后膨脹
A \circ B = ( A \ominus B ) \oplus B
閉運算:先膨脹后腐蝕
A \cdot B = ( A \oplus B ) \ominus B

先開后閉:可有效去除噪聲

開閉運算
OpenCV 圖像濾波
濾波函數(shù)

dst = cv2.filter2D(src , ddepth, kernel, dst, anchor, delta, borderType)
src:輸入圖像
ddepth:目標圖像的所需深度扭粱,包括CV_16S/CV_32F/CV_64F等
kernel:卷積核(或相當于相關(guān)核),單通道浮點矩陣震檩;如果要將不同的內(nèi)核應(yīng)用于不同的通道琢蛤,請使用拆分將圖像拆分為單獨的顏色平面,然后單獨處理它們
dst:輸出圖像抛虏,與輸入圖像尺寸和通道數(shù)相同
anchor:內(nèi)核的錨點博其,指示內(nèi)核中過濾點的相對位置;錨應(yīng)位于內(nèi)核中;默認值(-1,-1) 表示錨位于內(nèi)核中心
delta:在將它們存儲在dst中之前迂猴,將可選值添加到已過濾的像素中慕淡。類似于偏置
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 目標圖像:size和type與原始圖像相同
d 過濾期間使用的各像素鄰域的直徑
sigmacolor 色彩空間的sigma參數(shù)死遭,該參數(shù)較大時,各像素鄰域內(nèi)相距較遠的顏色會被混合到一起凯旋,從而造成更大范圍的半相等顏色
sigmaSpace 坐標空間的sigma參數(shù)呀潭,該參數(shù)較大時钉迷,只要顏色相近,越遠的像素會相互影響
borderType 卷積填充方式钠署,包括BORDER_CONSTANT糠聪,BORDERREPLICATE, BORDER_REFLECT等
原圖——————————均值濾波——————————高斯濾波——————————中值濾波——————————雙邊濾波

四、邊緣檢測

計算過程
  • 1.使用相應(yīng)邊緣檢測濾波器(如果是卷積核需要進行上下左右翻轉(zhuǎn))谐鼎;
  • 2.進行卷積運算計算邊緣檢測結(jié)果
基本算子
  • Robert算子卷積核
  • Sobel 算子卷積核(常用)
  • Laplace算子
  • LoG算子
  1. 邊緣檢測即圖像差分
  2. 常見邊緣檢測算子包括Robert算子舰蟆,Sobel算子,LoG 算子等狸棍,其中Sobel算子最為常用
  3. 二維圖像的邊緣具有強度和方向兩個性質(zhì)
  • Canny算子
    優(yōu)點:邊緣可自動連通
  • 算法步驟:
    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.計算梯度(幅值和方向)

  • 使用Sobel邊緣檢測算子對平滑圖像進行xy方向的邊緣檢測身害,假設(shè)得到結(jié)果分別為E_{x}E_{y}
  • 進一步計算梯度幅值和方向:
    \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.梯度幅值進行非極大值抑制

細化梯度幅值圖像中的屋脊帶草戈,只保留幅值局部變化最大的點

4.自動邊緣連接

  • 對上一步得到的圖像使用低塌鸯、高閾值\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對應(yīng)假邊緣唐片,去除
    T_2對應(yīng)真邊緣丙猬,全部保留
    T_3連接:臨接像素中是否有屬于T_3的像素
  • 通過查看弱邊緣像素及其8個鄰域像素,只要其中一個為強 邊緣像素费韭,則該弱邊緣點就可以保留為真實的邊緣茧球。

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


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

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


  • 頂帽與黑帽變換

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

原圖
頂帽變換 底帽變換

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


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

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

OpenCV實現(xiàn)邊緣檢測
  • Sobel算子邊緣檢測
    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 目標圖像的所需深度,包括CV_16S/CV_32F/CV_64F等
ksize 濾波器大小星持,通城缆瘢可選為(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)元素羹令,參見getStructuringElement
iterations 進行操作的次數(shù)

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

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


五、圖像變換

常見幾何變換
  • 放縮
  • 平移
  • 旋轉(zhuǎn)
  • 鏡像
距離變換
  • 通常作用于二值圖像上卢未,描述的是該位置像素點到最近的區(qū)域邊界的距離肪凛。如果假設(shè)背景為黑(對應(yīng)值為0),則為到最近0值的距離
距離變換
對數(shù)極坐標變換(Log-Polar變換)
  • 將圖像像素坐標轉(zhuǎn)換為極坐標辽社,然后對距離取對數(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)用:全景展開

六伟墙、灰度直方圖

灰度直方圖是關(guān)于灰度級分布的函數(shù),是對圖像中灰度級分布的統(tǒng)計滴铅〈量灰度直方圖是將數(shù)字圖像中的所有像素,按照灰度值的大小汉匙,統(tǒng)計其出現(xiàn)的頻率拱烁∩希灰度直方圖是灰度級的函數(shù),它表示圖像中具有某種灰度級的像素的個數(shù)戏自,反映了圖像中某種灰度出現(xiàn)的頻率邦投。通過直方圖可判斷圖像曝光及對比度等情況 .


灰度直方圖對圖像照明特征的反映

越集中對比度越低

直方圖均衡化
  • 直方圖均衡化的作用就是圖像增強
    需要滿足條件:亮的依然亮,暗的依然暗擅笔。
  • 直方圖映射方法:
    s _ { k } = \sum _ { j = 0 } ^ { k } \frac { n _ { j } } { n } , k = 0,1,2 , \cdots , L - 1
局部直方圖均衡化
  • 在圖像的一個小鄰域內(nèi)使用直方圖均衡化志衣,直方圖均衡可增加圖像對比度
    缺點:在照度正常區(qū)域?qū)Ρ榷壤笕菀壮霈F(xiàn)明暗相間條紋
利用局部直方圖統(tǒng)計進行灰度增強
  • 在圖像的每個小鄰域內(nèi),計算局部直方圖猛们,進而計算灰度和方差念脯;
  • 根據(jù)需求,對圖像的亮部或暗部進行增強阅懦。如前例需對暗部增強和二,
    (1)計算局部均值m,與全局均值m耳胎,如m_l≤k_0m,則認為該點是候選點
    (2)進一步計算局部方差\sigma_l與全局方差\sigma惕它,如k_1 ≤ k_2 \sigma怕午,且k_1 \sigma ≤ \sigma_l,k_1<k_2(對標準差為0的區(qū)域不增強)淹魄,則滿足增強條件
    (3)對同時滿足(1)郁惜,(2)條件的點進行增強:
    g(x,y) = E \cdot f(x,y)

七、霍夫(Hough)變換

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

效果更好喊废,能檢測大部分的直線線條祝高!

八、圖像分割

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


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

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

自動閾值分割

自動確定最佳閾值,使背景和目標之間的差異 最大

  • 大津(Otsu)算法原理I
    根據(jù)統(tǒng)計分析理論器腋,最佳閾值確定的最佳二分類應(yīng)使類內(nèi)方差最小溪猿,等同于類間方差最大
    大津算法基本思想:確定使灰度直方圖類間方差最大的最佳閾值假設(shè)灰度直方圖已經(jīng)歸一化,即
    p_i = \frac{n_i} {N}, \sum p_i = 1
  • 假設(shè)閾值T將像素灰度劃為兩類:C_0C_1纫塌,則每一類出現(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
  • 兩類的類內(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 }
    對應(yīng)的類間方差:
    \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 }
  • 大津算法是常用的一類灰度閾值自動選取方式依痊,目標是令類間方差最大
  • 大津算法求解采用遍歷方式,思想直接,實現(xiàn)速度快胸嘁。
OpenCV邊緣輪廓分割

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

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

局部閾值分割
  • 全局閾值法存在的問題


    分割效果不佳

    局部閾值分割

    局部閾值分割效果

多閾值分割
多閾值分割

1. 局部閾值法可有效解決照明不均的問題
2. 多閾值法是二值化分割方法的擴展荐吉,可解決多值目標 的分割問題


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

區(qū)域生長法:從種子點開始,按照一定準則(如 相鄰像素灰度相似性)向周圍擴散 口渔,將鄰域相似像素加入?yún)^(qū)域中

區(qū)域生長實現(xiàn)步驟:

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

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

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


分水嶺分割
分水嶺分割
  • 如果以圖像位置(x,y)為坐標深员,則圖像f(x,y)可以看作是地形俯視圖,其中“山峰的高度”與圖像中的 灰度值對應(yīng)蛙埂。
  • 假設(shè)在每個“盆地”的最低點開始打洞讓水漫上來倦畅,并且讓水以均勻速率上升。那么绣的,當不同“盆地”的水開 始匯聚時叠赐,能通過修建一個“水壩”擋住這種聚合的弧線就是圖像的分界線

漫水原則

局部極小值點:該點對應(yīng)一個盆地的最低點,當我們在盆地滴一滴水的時候屡江,由于重力作用芭概,水最終會匯聚到該點。注意:可能存在一個最小值面惩嘉,該平面內(nèi)的都是最小值點罢洲。
盆地的其它位置點:該位置滴的水滴會匯聚到局部最小點。
盆地的邊緣點:是該盆地和其它盆地交接點文黎,在該點滴一滴水惹苗,會等概率的流向任何一個盆地殿较。

分水嶺算法的過分割問題

由于噪聲點或者其它干擾因素的存在,使用分水嶺算法常常存在過度分 割的現(xiàn)象桩蓉,這是因為很多很小的局部極值點的存在


分水嶺算法的過分割問題

在初始時給marker淋纲,改善過分割問題,為了解決過度分割的問題院究,可以使用基于標記(mark)圖像的分水嶺算法洽瞬,就是指定mark 圖像,在這個區(qū)域的洪水淹沒過程中儡首,水平面都是從定義的marker開始的片任,這樣可以避 免一些很小的噪聲極值區(qū)域的分割。

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

Opencv實現(xiàn)

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔬胯,一起剝皮案震驚了整個濱河市对供,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌氛濒,老刑警劉巖产场,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舞竿,居然都是意外死亡京景,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門骗奖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來确徙,“玉大人,你說我怎么就攤上這事执桌”苫剩” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵仰挣,是天一觀的道長伴逸。 經(jīng)常有香客問我,道長膘壶,這世上最難降的妖魔是什么错蝴? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮颓芭,結(jié)果婚禮上顷锰,老公的妹妹穿的比我還像新娘。我一直安慰自己畜伐,他們只是感情好馍惹,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般万矾。 火紅的嫁衣襯著肌膚如雪悼吱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天良狈,我揣著相機與錄音后添,去河邊找鬼。 笑死薪丁,一個胖子當著我的面吹牛遇西,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播严嗜,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼粱檀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漫玄?” 一聲冷哼從身側(cè)響起茄蚯,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎睦优,沒想到半個月后渗常,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡汗盘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年皱碘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隐孽。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡癌椿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菱阵,到底是詐尸還是另有隱情如失,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布送粱,位于F島的核電站,受9級特大地震影響掂之,放射性物質(zhì)發(fā)生泄漏抗俄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一世舰、第九天 我趴在偏房一處隱蔽的房頂上張望动雹。 院中可真熱鬧,春花似錦跟压、人聲如沸胰蝠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茸塞。三九已至躲庄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钾虐,已是汗流浹背噪窘。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留效扫,地道東北人倔监。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像菌仁,于是被迫代替她去往敵國和親浩习。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容