1 距離變換
以O(shè)pencv的distanceTransform距離變換為例。
1.1 梗概
計(jì)算圖像中每一個(gè)非零點(diǎn)距離離自己最近的零點(diǎn)的距離,distanceTransform的第二個(gè)Mat矩陣參數(shù)dst保存了每一個(gè)點(diǎn)與最近的零點(diǎn)的距離信息,圖像上越亮的點(diǎn),代表了離零點(diǎn)的距離越遠(yuǎn)。
1.2 詳解
1.2.1 變換
Distance fields can also be signed, in the case where it is important to distinguish whether the point is inside or outside of the shape.[1]
Usually the transform/map is qualified with the chosen metric. For example, one may speak of Manhattan distance transform, if the underlying metric is Manhattan distance
上方翻譯具體表達(dá):
距離變換可以表示區(qū)分改點(diǎn)在幾何圖形的內(nèi)部或外部。(根據(jù)變換后的距離值)
變換圖常用度量標(biāo)準(zhǔn),例如曼哈頓距離歐式距離也可以,但是歐式距離不長用于距離變換中(Euclidean Metric)
1.2.1.1 下圖為歐式距離和曼哈頓距離的區(qū)別
image.png
1.2.1.2 距離變換 (曼哈頓距離(Manhattan distance)標(biāo)準(zhǔn)講解)
以二值圖像為例,計(jì)算0到非0的距離;其中區(qū)域塊內(nèi)部的像素值為1,其他像素值為0。距離變換給出每個(gè)像素點(diǎn)到最近的區(qū)域塊邊界的距離,區(qū)域塊內(nèi)部的距離變換結(jié)果為0。輸入圖像如圖1所示,D4距離的距離變換結(jié)果如圖2所示。
image
image.png
image
具體的距離變換的距離計(jì)算可以多種多樣,只是不同方法性能不一。
常用『掩模』
1.2.2 舉例
變換前(二值化/開運(yùn)算)
before distance transform
變換后
distanceTransform
1.3 用途
1.3.1 watershed 分水嶺算法 ( 細(xì)化輪廓 )
image.png
image.png
image.png
image.png
前方開運(yùn)算+腐蝕(去除噪點(diǎn)和非必要連接處)+膨脹(消化腐蝕影響)- 記為A
距離變換,求曼哈頓距離 - 記為B
二值化,細(xì)化具體輪廓 - 記為C
A - C = D (邊界)
創(chuàng)建標(biāo)記(marker,它是一個(gè)與原始圖像大小相同的矩陣,int32數(shù)據(jù)類型),表示其中的每個(gè)區(qū)域。分水嶺算法將標(biāo)記的0的區(qū)域視為不確定區(qū)域,將標(biāo)記為1的區(qū)域視為背景區(qū)域,將標(biāo)記大于1的正整數(shù)表示我們想得到的前景 (使用 cv2.connectedComponents() 來實(shí)現(xiàn)這個(gè)功能) (
連接組件標(biāo)記算法(connected component labeling algorithm)是圖像分析中最常用的算法之一,算法的實(shí)質(zhì)是掃描二值圖像的每個(gè)像素點(diǎn),對于像素值相同的而且相互連通分為相同的組(group),最終得到圖像中所有的像素連通組件。)E = connectedComponents(
C)
連通處理之后返回的標(biāo)記圖像
cv2.connectedComponents
# 去重后的標(biāo)記區(qū)域的點(diǎn)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 34, 36, 32, 33, 35, 37]
連通標(biāo)記之后 plt.show.png
F =
E+1 , 分水嶺對所有標(biāo)注都要>1F[
D=255(邊界)] = 0 (背景區(qū)域)所以 F[F>1] 前景 ;F[F=1] 未知區(qū)域 ;F[F=0] 背景
Add one to all labels so that sure background is not 0, but 1D = watershed(img, F)
1.3.2 細(xì)化輪廓和查找物體質(zhì)心
image.png
image.png
1.4 其他
1.5 參考文獻(xiàn)
- 距離變換
https://en.wikipedia.org/wiki/Distance_transform - 曼哈頓距離
https://en.wikipedia.org/wiki/Taxicab_geometry - 距離變換分水嶺
https://imagej.net/Distance_Transform_Watershed - Opencv connectedComponents函數(shù) 連通區(qū)域
https://docs.opencv.org/master/d3/dc0/group__imgproc__shape.html#gaedef8c7340499ca391d459122e51bef5 - 知乎 分水嶺opencv
https://zhuanlan.zhihu.com/p/67741538
2 OTSU二值化算法 (類間方差)
是日本學(xué)者大津(OTSU)提出來的
2.1 梗概
大津法(OTSU)是一種確定圖像二值化分割閾值的算法,由日本學(xué)者大津于1979年提出
2.2 詳解
2.2.1 算法過程
轉(zhuǎn)灰度圖
創(chuàng)建直方圖 Histograms
直方圖平滑 Histograms_smooth
注意:以下均需要loop 0~255 像素點(diǎn)(和直方圖)
i代表當(dāng)前l(fā)oop item的灰度值,p(i) 代表該灰度值所在直方圖的點(diǎn)數(shù)
均需要?dú)w一化[0,1]-
前景圖像總點(diǎn)數(shù)w0,后景圖像總點(diǎn)數(shù)w1
image.png -
前景平均灰度值u0 ,景平均灰度值u1,總灰度值uT(質(zhì)量矩)
image.png
對應(yīng)關(guān)系
image.png -
求類間方差
前景 * ()
image.png 取
最大類間方差時(shí)對應(yīng)的灰度的i就是最佳閾值
說白了就是一張圖下, [0,t) , [t,255] 分別代表前景,后景的兩個(gè)區(qū)間分兩類,
然后分別求對于質(zhì)量矩的方差所決定的最佳閾值。
(其中還有`前景總點(diǎn)數(shù)(權(quán)重)`和后景的乘積有關(guān)系)
2.2.2 過程圖示


2.3 使用
2.3.1 二值化圖像
image.png
image.png


















