cs131 lecture 11 Image Resizing-Seam Carving
如何保留重要的資訊又縮減尺寸,其中定義甚麼是重要,甚麼是不重要的影像資訊 Basie Idea 不重要的資訊代表影像梯度變化小的地方,定義一個energy function/ 使用梯度來作為energy function的原因: 邊界代表紋理資訊 人眼對edge比較敏感,平滑處就可以被視為不重要資訊 概念很簡單 左圖對整張影像濾除低能量pixel 中間對每行方向濾除最低能量pixel 右圖對每列方向濾除最低能量pixel,看起來結果較好一點,但仍看得出來階梯處有扭曲的感覺 Seam Carving 接縫裁剪(Seam Carving),是一個可以針對圖像內容做正確縮放的算法。概念上,算法會找出一系列的接縫(seam)(接縫是在圖像中最不重要的一連串像素),接著利用接縫對圖像做縮放。如果是要縮小圖像,則移除這些接縫,若是放大,則在這些接縫的位置上,插入一些像素。接縫裁剪可以人工定義一些不會被修改的像素區域,也可以從圖像中移除整個物體。by wiki 流程 輸入要變化的影像與尺寸 計算energy function 從energy function計算seam cost $M$ 選出裁切方向最小的seam carving 濾除足夠多的行列直到與輸入尺寸相同 計算Seam cost的部分,主要使用動態規劃的方法來實作,因為每次計算seam cost時必須計算與鄰居周圍的相關資訊 重新定義參數: $E$是前面提到的energy function,$E(i,j)是在影像上對應i,j的座標點能量值$ $M$是seam cost,用來評估將該點作為seam carving時依據,$M$的計算公式: $M(i,j) = E(i,j) + min(M(i-1, j-1), M(i-1,j), M(i-1, j+1))$ 可以從公式看到,seam cost所代表的意義就是由該點所對應的energy function,加上鄰近上方像素的最小點,就可以當作今天要把該點去除或展開時的一個成本,成本高低代表該點是重要資訊的指標 Dynamic Programming 由於seam cost公式是計算矩陣$M$,其中又參考到自身周圍計算過的數值,因此需要用到動態規劃(Dynamic Programming, DP) $M(i,j) = E(i,j) + min(M(i-1, j-1), M(i-1,j), M(i-1, j+1))$ Searching for Minimum 得到seam cost矩陣後,從最下方開始尋找最小向上路徑 ...