[CV] Seam Carving for Content-Aware Image Resizing

Date:     Updated:

카테고리:

태그:

Main Reference:
- CONTENT-AWARE IMAGE RESIZING - TREKHLEB


📹 Seam carving

Original Content-aware standard
mountain mountain1 mountain2

Seam carving algorithm의 mian idea는 이미지를 resize할 때 단순 비율로 resize하는 것이 아니라 interesting contents 부분을 보존하며 resize하자는 것이다. 위 그림은 636x437 이미지에서 높이 방향 50 픽셀을 제거한 그림이다. 오른쪽 두 그림 중 첫 번째는 seam carving algorithm을 이용한 contetn-aware resize, 두 번째는 standard resize한 것이다. Content-aware resize한 그림을 보면 contents인 산은 변화가 없고 배경 부분만 잘려 나간 것처럼 보인다.

Seam carving algorithm은 간단하게 다음 단계로 구성된다.

  1. Compute energy map of iamge
    • image의 energy map 구하기
  2. Find the seam with the lowest energy based on energy map (with dynamic programming)
    • energy map을 기반으로 가장 효율적인 경로 구하기
  3. Remove the seam from the image
    • image에서 찾은 경로 제거
  4. Repeat until the image width is reduced to the desired value.
    • 필요한 만큼 위 과정을 반복


Compute energy map of iamge

energy_map

\[dx = \begin{bmatrix} 1 & 0 & -1 \\ 2 & 0 & -2 \\ 1 & 0 & -1 \\ \end{bmatrix} \textbf{ , } dy = \begin{bmatrix} 1 & 2 & 1 \\ 0 & 0 & 0 \\ -1 & -2 & -1 \\ \end{bmatrix}\] \[\textbf{Energy}\left ( \textbf{f} \right ) = \sqrt{\left ( \frac{\partial f}{\partial x} \right )^{2} + \left ( \frac{\partial f}{\partial y} \right )^{2}}\]
  • rgb 이미지를 gray 이미지로 변환
  • sobel operator를 이용해 dx & dy 계산
  • energy map 구하기


Find the seam with the lowest energy based on energy map (with dynamic programming)

cumulate_map


\[\textbf{M}\left ( i, j \right ) = \textbf{Energy}\left ( i, j \right ) + min\left ( \textbf{M}\left ( i-1, j-1 \right ), \textbf{M}\left ( i-1, j \right ), \textbf{M}\left ( i-1, j+1 \right ) \right )\]


  • 주어진 Energy map을 기반으로 cumulative minimum energy map 계산
    • 세로 픽셀 줄일 때에는 위에서 아래로 cumulate
    • 가로 픽셀 줄일 대에는 왼쪽에서 오른쪽으로 cumulate
  • 마지막 row(column)에서 가장 작은 energy 경로 backtracking


seam

  • 산 이미지의 경우 맨 위 하늘 배경 부분이 seam으로 선택된다.
  • 원본 이미지에서 해당 seam 부분을 제거
  • 위 과정을 반복


📹 Results

Original Content-aware standard
balloon balloon1 balloon2


구글링 하다가 찾은 재미있는 예제. contents masking 이후 seam carving 진행했다고 한다.
Reference: https://github.com/andrewdcampbell/seam-carving

Original Content-aware resize
ratatouille ratatouille_resize

ratatouille


맨 위로 이동하기

Vision 카테고리 내 다른 글 보러가기

댓글 남기기