簡介
接縫裁剪(Seam carving),是一個可以針對照片內容做正確縮放的算法(由Shai Avidan和Ariel Shamir所發表)。概念上,這個算法會找出好幾條seams,而這些seams是在照片中最不重要的一連串像素,接著再利用這些seams,對照片做縮放。如果是要縮小照片,則移除這些seams,若是放大,則在這些seams的位置上,插入一些像素。
這樣的技術可以用在image retargeting,將照片正確且沒有扭曲得放在各種大小的螢幕或位置上,比如說,手機、投影幕等等。
Seams
Seams 有兩種形式,水平或垂直的。若是水平的seam,則它會是一串從照片最左側到最右側的像素,而像素的數量等於照片的寬。反之,若是垂直的seam,則是一條從照片頂端到底端的pixel,pixel數量則等於照片的長。
算法
1. 首先,拿到一張需要縮小的照片(這裡以縮小舉例)
2. 接著計算照片中每一個像素的強度(energy),這一步可以由很多算法完成,這裡以gradient magnitude為例。
3. 有了每一個pixel的強度後,可以利用一些算法,像是dynamic programming等等,找到圖中數條強度較低的seams。
4. 接著把這些seams拿掉,就可以拿到一張縮小後的照片。
5. 若是需要放大圖片,則可以在這些找到的seam的旁邊,增加pixel,而pixel的value可以簡單的取附近的pixel的平均。
計算 seams
在這個算法中,每次要找出一條照片中能量最小的seam,這裡的能量可以想成是頻率低,或者是照片中較為不重要的pixel。而找出seam的方法有很多種,可以利用dynamic programming或者其他算法完成。