SSIM (Structural Similarity Index Measure)


서론

사람의 시각체계는(HVS) 이미지의 밝기(Luminance), 대비(Contrast), 구조(Structure) 등에 자각하여 이미지의 품질(Quality)을 관찰하는데 L2 loss는 모든 픽셀이 독립적이라는 가정 가정이 내포되어 있다.

이는 한 이미지의 특정 픽셀이 다른 이미지의 동일한 위치의 픽셀과 얼마나 다른지만 계산하고, 그 픽셀이 주변 픽셀에 어떤 영향을 미치는지는 고려하지 않는다는 것이다.

  • 예를 들어, 크기가 3x3인 두 이미지를 비교할 때, 첫 번째 이미지는 모든 픽셀이 밝은 색이고, 두 번째 이미지는 가운데 픽셀만 어두운 색이라 하자.
  • L2 loss는 가운데 픽셀만 다르기 때문에 두 이미지 사이의 차이를 매우 작게 계산할 것이다.
  • 그러나 사람의 눈으로 보면, 가운데 픽셀이 어두워지면 이미지 전체가 달라보일 수 있다.
  • 즉, 가운데 픽셀의 특성이 이미지의 전체적인 품질(Quality)에 큰 영향을 미칠 수 있다는 것이다. 이런 부분이 L2 loss의 한계점이다.

이를 해결하기 위해 사람의 시각체계를 고려한 이미지의 유사도를 측정하는 측도로 SSIM을 사용한다.

또한 SSIM은 두 이미지의 유사도를 측정하는데 사용되기도 하지만 두 이미지가 유사해지도록 만들어야 되는 문제일때도 사용된다.

참조: https://arxiv.org/pdf/1511.08861.pdf

목차

  1. 본론
    1. Luminance
    2. Contrast
    3. Structure
  2. SSIM Loss

본론

SSIM은 luminance, contrast, structure 3가지 요소를 이용한다.

SSIM의 결과값은 0~1사이이며 1에 가까울수록 두 이미지가 유사하다.

입력값의 범위에 따라 -1~1 사이의 값을 가질 수도 있으며 마찬가지로 1에 가까울수록 두 이미지가 유사하다는 것은 동일하다.

SSIM의 전체 수식은 아래와 같다.

SSIM에서 일반적으로 \(\alpha, \beta, \gamma\)는 1로 사용하며 이는 하이퍼파라미터이다.

\[SSIM(x,\;y) = l(x, y)^{\alpha}\cdot c(x,\;y)^{\beta}\cdot s(x,\;y)^{\gamma}\]

Luminance

휘도라고 하며 빛의 밝기를 나타내는 양이다. 이미지에서 별도의 빛의 밝기를 추출해 사용하지 않고 이미지의 픽셀값을 사용한다.

그 이유는 이미지가 밝을 수록 픽셀의 값 크기 때문이다.

두 이미지를 \(x, y\)라 할때 공식은 아래와 같다.

  • \(\mu_x\): 이미지의 평균
\[l(x, \;y)=\frac{2\mu_x\mu_y +C_1}{\mu^2+\mu_y^2+C_1}\]

이미지의 평균(\(\mu_x\))는 아래 수식으로 구한다

  • \(x_i:\) 각 픽셀의 값
  • \(N\): 전체 픽셀의 갯수
\[\mu_x = \frac{1}{N}\underset{i=1}{\overset{n}{\sum}}x_i\]

\(C_1\)은 분모가 0이 되지 않도록 하기 위해서 사용되는 상수값이며 아래와 같은 수식으로 정의된다.

\(K_1\)은 일반 상수이며 보통 0.01을 많이 사용한다.

\(L\)은 픽셀값의 범위를 의미하며 일반적으로 8비트의 값을 사용하기 때문에(0~255) 255를 \(L\)로 사용한다.

따라서 \(C_1=(0.01\times 255)^2=6.5025\) 를 주로 사용한다.

\[C_1 = (K_1L)^2\]

Contrast

대조는 이미지 내에서 빛의 밝기가 바뀌는 정도를 나타내는 양이다. 이 값은 평균 픽셀 간의 값이 얼마나 차이가 나는지 통해 정량화 할 수 있다.

\[c(x,\;y) =\frac{2\sigma_x\sigma_y+C_2}{\sigma_x^2+\sigma_y^2+C_2}\]

이미지의 표준편차(\(\sigma_x\))는 아래 수식으로 구한다.

  • \(N-1\): 표본의 표준 편차를 구하기 때문에 표본의 표준편차가 모표준 편차가 될 수 있도록 하기 위해 \(N-1\)을 사용한다.
\[\sigma_x = \left(\frac{1}{N-1}\underset{i=1}{\overset{n}{\sum}}(x_i-\mu_x)^2\right)^\frac{1}{2}\]

\(C_2\)역시 상수이며 이 경우 아래와 같은 수식을 사용하며 \(K_2=0.03\)을 주로 사용한다.

\[C_2=(K_2L)^2=(0.03\times255)^2=58.5225\]

Structure

픽셀의 구조적 차이점을 나타낸다. 즉 픽셀의 패턴을 표현하는 요소이다.

  • 예를들어 두 장의 이미지에 사과와 배가 포함되어있다고 하자. 하나는 사과가 배의 왼쪽에 있고 다른 하나는 사과가 배의 오른쪽에 있다면 픽셀 단위의 비교만으로는 두 이미지가 매우 유사하다고 판단할 수 있지만 SSIM의 structure를 통해 이미지의 객체 배치가 다르다는 것을 포착할 수 있다.
  • 정의는 아래와 같으며 \(\sigma_x, \sigma_y\)는 각각 \(x,y\)이미지의 표준편차이다.
\[s(x,\;y) =\frac{\sigma_{xy}+C_3}{\sigma_x\sigma_y+C_3}\]

\(x,y\) 이미지에 대한 공분산은 아래 수식으로 구할 수 있다.

\[\sigma_{xy}=\frac{1}{N-1}\underset{i=1}{\overset{n}{\sum}}(x_i-\mu_x)(y_i-\mu_y)\]
  • \(C_3\)\(\frac{C_2}{2}\)로 사용한다. 이렇게 하는 이유는 SSIM은 \(l(x,y), c(x,y), s(x,y)\)의 곱으로 정의되어 계산할 때 식을 간편화 할 수 있기 때문이다.
  • \(\frac{\sigma_{xy}}{\sigma_x\sigma_y}\) 수식의 의미를 살펴 보면, luminance을 평균contrast를 표준 편차로 이용하여 Normalized(정규화)된 픽셀 값의 분포에서 픽셀 값을 다시 정의하는 것을 볼 수 있다.
  • 최종적으로 각 이미지의 structure 성분의 곱(원본 픽셀에서 평균을 빼고 해당 이미지의 표준편차로 나눈 Normalized된 픽셀값)의 평균을 구하는 것과 같다.
  • \(\sigma_{xy}\): 공분산
  • \(\sigma_x,\;\sigma_y:\) 각 이미지의 표준편차
\[corr(X,Y) = \frac{\sigma_{xy}}{\sigma_x\sigma_y} = \frac{E[(x-\mu_x)(y-\mu_y)]}{\sigma_x\sigma_y}= E \Bigg[\frac{(x-\mu_x)(y-\mu_y)}{\sigma_x\sigma_y}\Bigg]\]
\[=E\Bigg[\frac{(x-\mu_x)}{\sigma_x}\frac{(y-\mu_y)}{\sigma_y}\Bigg]\]

위에서 설명했던 것 처럼 최종 수식은 다음과 같으며 \(\alpha, \beta, \gamma\)는 1로 주로 사용된다.

distance로 사용되기 위한 여러 조건중 triangle inequality(삼각부등식) \(|a+b| \leq |a|+|b|\)를 만족하지 않아서 distance를 구하기 위한 함수로는 사용할 수 없다.

  • 삼각부등식은 유클리디안 공간에서의 거리 개념에서 사용되는데 임의의 세 개의 점 \(a,b,c\)에 대해 다음이 성립해야 한다.
  • \(d(a,b)+d(b,c) \geq d(a,c)\)
  • \(d(x,y)\)는 점 \(x,y\)사이의 거리를 의미함
\[SSIM(x,\;y) = l(x, y)^{\alpha}\cdot c(x,\;y)^{\beta}\cdot s(x,\;y)^{\gamma} \]
\[ = \frac{2\mu_x\mu_y +C_1}{\mu^2+\mu_y^2+C_1}\;\frac{2\sigma_x\sigma_y+C_2}{\sigma_x^2+\sigma_y^2+C_2}\;\frac{\sigma_{xy}+C_3}{\sigma_x\sigma_y+C_3}\]
\[ = \frac{(2\mu_x\mu_y+C_1)(2\sigma_{xy}+C_2)}{\sigma^2_{x}+\sigma^2_{y}+C_2}\]

만약 RGB 이미지에서 SSIM을 적용해야 한다면 각 채널 별로 SSIM을 구한 후 모두 합해주면 된다.

식으로 나타내면 아래와 같다.

  • \(w_r,w_g,w_b\) : 각 채널별 SSIM에 가중을 부여하는 hyper parameter
  • \(SSIM_R, SSIM_G, SSIM_B\) : 각 채널별 SSIM 값
  • 특정 채널에 대하여 더 가중치를 줄 수도 있으며 일반적으로 RGB에 1/3 씩 균등하게 가중치를 주어서 사용한다.
\[SSIM_{rgb} =w_rSSIM_R(I_1,I_2)+w_gSSIM_G(I_1,I_2)+w_bSSIM_B(I_1,I_2)\]

SSIM Loss

SSIM을 Loss로 사용하려면 아래와 같이 식을 변경해서 사용할 수 있다.

SSIM은 미분 가능하므로 Loss로 사용 가능하며 0 ~ 1 사이의 스코어 값을 1에서 빼주면 두 이미지의 유사도가 낮을수록 값이 커지기 때문에 Loss로 사용할 수 있다.

SSIM을 좀 더 효과적으로 사용하기 위해서는 이미지 전체(globally)를 한번에 비교하기 보다는 N x N 윈도우를 이용하여 (ex. 8 X 8, 11 X 11) 지역적(locally)으로 비교하여 사용하는 것이 효과적이다.

왜냐하면 이미지의 왜곡이나 통계적 특성이 이미지 전반에 걸쳐서 나타나는 경우보다 지역적으로 나타나는 경우가 많고 지역적으로 더 다양한 특성을 분석할 수 있기 때문이다.

\[L_{SSIM}= 1-SSIM(x,y)\]

Example

#tensor(0.2894) tensor(0.7756) tensor(0.8177)