본문으로 바로가기

헤시안 행렬 (Hessian matrix) / Frangi filter

category Math/Calculus 2021. 2. 4. 15:54

헤시안 행렬 (hessian matrix)

1) 정의

    - 다변수 함수의 헤시안 행렬은 2계 편미분으로 구성되어 있다.

    - 오직 스칼라 함수에만 적용이 가능하다.

$$H(f) = \begin{bmatrix} \frac{\partial^2f}{\partial x_1^2} & \frac{\partial^2f}{\partial x_1\partial x_2} & \cdots & \frac{\partial^2f}{\partial x_1\partial x_n} \\\\ \frac{\partial^2f}{\partial x_2\partial x_1} & \frac{\partial^2f}{\partial x_2^2} & \cdots & \vdots \\\\ \vdots & \vdots & \ddots & \vdots \\\\ \frac{\partial^2f}{\partial x_n\partial x_1} & \cdots & \cdots & \frac{\partial^2f}{\partial x_n^2} \end{bmatrix}$$

 

2) 의미

    - 행렬을 선형변환이라는 시각에서 바라볼 때, 헤시안 행렬은 Bowl 형태 함수를 볼록하거나 오목하게 만드는 선형변환이다.

    - 고유값과 고유벡터를 활용해 선형변환의 변화정도를 확인할 수 있는데 이는 헤시안 행렬에도 물로 적용할 수 있다.

 

Frangi filter

1) 개요

    - skimage의 frangi filter 모듈을 사용해 이미지의 ridge (계곡) 검출에 사용한다. (e.g. 강줄기, 핏줄, 주름 등)

    - 헤시안 행렬의 고유벡터들은 선형변환의 주요 축을 나타내고 고유값들은 변환의 크기를 나타낸다. 이때, 특정 지점에서 고유값의 크기 차이가 많이 난다면 해당 point는 길쭉한 모양이게 된다.

 

2) 사용 예시

from skimage import data
from skimage.filters import frangi, hessian
import cv2

import matplotlib.pyplot as plt

image = cv2.imread('/Users/sjpyo/downloads/abc.jpg', 0)

fig, ax = plt.subplots(ncols=3, figsize = (16, 8))

ax[0].imshow(image, cmap=plt.cm.gray)
ax[0].set_title('Original image')

ax[1].imshow(frangi(image), cmap=plt.cm.gray)
ax[1].set_title('Frangi filter result')

ax[2].imshow(hessian(image), cmap=plt.cm.gray)
ax[2].set_title('Hybrid Hessian filter result')

for a in ax:
    a.axis('off')

plt.show()

'Math > Calculus' 카테고리의 다른 글

Taylor series (테일러 급수)  (0) 2021.03.09
경사하강법의 직관적, 수학적 이해  (0) 2021.02.05
자코비안 (Jacobian)  (0) 2021.02.03
라플라시안 (Laplacian)  (0) 2021.02.03
발산 (Divergence) & 회전 (Curl)  (0) 2021.02.02