![]() |
OpenCV 4.12.0
開源計算機視覺
|
上一個教程: 運動去模糊濾波器
下一個教程: 週期性噪聲去除濾波器
| 原始作者 | Karpushin Vladislav |
| 相容性 | OpenCV >= 3.0 |
在本教程中,您將學習
在數學中,梯度結構張量(也稱為二階矩矩陣、二階矩張量、慣性張量等)是一個從函式梯度匯出的矩陣。它總結了在點指定鄰域內梯度的主要方向,以及這些方向的一致性程度(相干性)。梯度結構張量廣泛用於影像處理和計算機視覺,用於2D/3D影像分割、運動檢測、自適應濾波、區域性影像特徵檢測等。
各向異性影像的重要特徵包括區域性各向異性的方向和相干性。本文將展示如何估計方向和相干性,以及如何透過梯度結構張量分割具有單一區域性方向的各向異性影像。
影像的梯度結構張量是一個2x2對稱矩陣。梯度結構張量的特徵向量表示區域性方向,而特徵值則表示相干性(各向異性度量)。
影像 \(Z\) 的梯度結構張量 \(J\) 可以寫為:
\[J = \begin{bmatrix} J_{11} & J_{12} \\ J_{12} & J_{22} \end{bmatrix}\]
其中 \(J_{11} = M[Z_{x}^{2}]\),\(J_{22} = M[Z_{y}^{2}]\),\(J_{12} = M[Z_{x}Z_{y}]\) 是張量的分量,\(M[]\) 是數學期望的符號(我們可以將此操作視為在視窗w中的平均),\(Z_{x}\) 和 \(Z_{y}\) 是影像 \(Z\) 對 \(x\) 和 \(y\) 的偏導數。
張量的特徵值可以透過以下公式找到:
\[\lambda_{1,2} = \frac{1}{2} \left [ J_{11} + J_{22} \pm \sqrt{(J_{11} - J_{22})^{2} + 4J_{12}^{2}} \right ] \]
其中 \(\lambda_1\) 是最大特徵值,\(\lambda_2\) 是最小特徵值。
各向異性影像的方向
\[\alpha = 0.5arctg\frac{2J_{12}}{J_{22} - J_{11}}\]
相干性
\[C = \frac{\lambda_1 - \lambda_2}{\lambda_1 + \lambda_2}\]
相干性範圍從0到1。對於理想的區域性方向(\(\lambda_2\) = 0, \(\lambda_1\) > 0),它為1;對於各向同性灰度結構(\(\lambda_1\) = \(\lambda_2\) > 0),它為0。
您可以在OpenCV原始碼庫的samples/cpp/tutorial_code/ImgProc/anisotropic_image_segmentation/anisotropic_image_segmentation.cpp中找到原始碼。
各向異性影像分割演算法包括梯度結構張量計算、方向計算、相干性計算以及方向和相干性閾值處理。
函式 calcGST() 使用梯度結構張量計算方向和相干性。輸入引數 w 定義了視窗大小。
以下程式碼將閾值 LowThr 和 HighThr 應用於影像方向,並將閾值 C_Thr 應用於前一個函式計算的影像相干性。LowThr 和 HighThr 定義了方向範圍。
最後,我們結合閾值處理結果。
您可以在下面看到具有單一方向的真實各向異性影像: 
您可以在下面看到各向異性影像的方向和相干性: 
您可以在下面看到分割結果: 
結果是使用 w = 52, C_Thr = 0.43, LowThr = 35, HighThr = 57 計算的。我們可以看到演算法只選擇了具有單一方向的區域。