一、簡介:
Seam carving是content-based的image resiz時,也就是在image放大縮小時,對不重要的部份進行調整,影像重要的部份則不更改。如此,影像較重要的部份較不會有變形的問題。二、方法:
1. 影像縮小:
1-1. 找出每個pixel的energy。1-2. 找出圖片的seam
利用類似DP
1-3. 刪除seam
2. 影像放大:
2-1. 利用和影響縮小一樣的方式找出多條seam2-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/
沒有留言:
張貼留言