1. 程式人生 > >Matlab 影象處理之距離函式

Matlab 影象處理之距離函式

距離變換提供畫素與某個影象的子集(可能是表示物體或某些特徵)的距離。所產生的影象在該子集元素位置處的畫素值為0,鄰近的畫素具有較小的值,離他越遠的數值就越大。換句話說,一幅二值影象的距離變換提供每個畫素到最近非零畫素的距離。在影象邊界外的假象畫素也當做非零畫素看待。

作為說明,考慮一幅二值影象,1表示物體,0表示背景。這裡,距離變換給影象的每個畫素賦予到最近物體或到整個影象邊界的距離。物體內部畫素的距離變換等於0。輸入影象如圖1所示,D4距離的距離變換結果如圖2所示。
圖1 二值影象。灰色畫素對應於物體而白色畫素對應於背景 圖2 在計算時考慮D4距離的距離變換結果
D4距離是城市街區距離,在數字柵格中不允許向對角線方向移動。只允許橫向和縱向移動。
D4[(i,j),(h,k)]=|i-h|+|j-k|.(數距離時,可以從當前格開始跳,直到跳到離他最近的物體的格子裡,所用的步數就是距離)

距離變換的意義:在二值影象中,距離變換就是將二值影象轉換為灰度影象的過程。在二值影象中,通常將影象分為前景影象和背景影象,假設目標影象的畫素為1為白色,背景影象的畫素為0為黑色。在轉換後的灰度影象中每個連通域中的畫素的灰度級,與該畫素點到其背景畫素點的最近距離有關。
假設一個二值影象的包含一個連通區域S,其中有目標O和背景B,距離為D,則距離變換的定義如下:
這裡寫圖片描述

其中disf()為距離函式,如果用尤拉距離公式表示,如下:
這裡寫圖片描述

對距離的計算可採用兩個模板,分別為向前和向後模板,如下圖所示。
這裡寫圖片描述

計算步驟如下:
1.使用向前模板,對影象從上到下,從左到右進行掃描,模板中心0點對應的畫素值如果為0則跳過,如果為1則計算模板中每個元素與其對應的畫素值的和,分別為sum1,sum2,sum3,sum4,sum5,而中心畫素為這五個值中的最小值。
2.使用向後模板,對影象從下到上,從右到左進行掃描,方法同上。
3.一般我們使用的模板為3*3或5*5,分別如下圖所示:
這裡寫圖片描述


bwdist函式用於計算元素之間的距離。
如果a=這裡寫圖片描述,那麼[D,L]=bwdist(a);
D=這裡寫圖片描述,L=這裡寫圖片描述
其中,D表示零元素所在位置靠近非零元素的最短距離。L表示該元素所靠近的非零元素的位置,matlab中,元素所在的位置標號,是按列來計算的。比如a中各元素的索引值如下:
這裡寫圖片描述
棋盤距離變換的程式碼,(在二值影象中)
T=bwdist(F,’chessboard’);
%(x1,y1) 和 (x2,y2)的棋盤距離是 (│x1 – x2│,│y1 – y2│)的最大值.