2015年7月8日 星期三

Image processing:seam carving

一、簡介:

Seam carving是content-based的image resiz時,也就是在image放大縮小時,對不重要的部份進行調整,影像重要的部份則不更改。如此,影像較重要的部份較不會有變形的問題。

二、方法:

1. 影像縮小:

  1-1. 找出每個pixel的energy。

  1-2. 找出圖片的seam
利用類似DP

  1-3. 刪除seam

2. 影像放大:

  2-1. 利用和影響縮小一樣的方式找出多條seam

  2-2. 對於每一條seam複製一次,並和周圍平均,插入在原seam右邊(左右放大)或下面(上下放大)

3. 左右及上下同時ressize:

  應該找一個順序,輪流移除col和row。順序取決於energy大小。
  這時候應該計算移除col和移除row比較energy大小,選擇移除後較小的。
  可參考原文:


三、延伸

1. specify object:

  由於有些情況背景太過複雜,有可能導致計算seams時,會通過重要的物體,因此讓使用者
點出物體,並將物體的energy調為最大,如此在計算Seams時便不會經過物體

  1-1. 讓使用者點出物體

  1-2. 讓在物體內部的pixel energy調整為最大

  1-3. 紀錄energy,之後更改(如放大縮小)以這個energy map為主

2. object remove:

  讓使用者點出物體,將所有在物體內部的pixel把energy調到最小,再利用多次的影像縮小即可以移除物體。若要讓影像恢復原本大小,再做影像放大,調整回原大小即可。
  2-1. 讓使用者點出物體

  2-2. 讓在物體內部的pixel energy調整為最小
    這裡是計算整張圖片最大的energy再做負數當作最小值。

  2-3. 移除等於物體寬度(或高度)的seams

3. content amplify:

  利用多次的縮小再放大,可以把比較不重要的東西消除,達到內容加強的效果。


Ref:
 wiki: https://en.wikipedia.org/wiki/Seam_carving
https://compvisionlab.wordpress.com/2013/03/24/seam-carving-matlab/
http://kirilllykov.github.io/blog/2013/06/06/seam-carving-algorithm/

沒有留言:

張貼留言