2015年7月10日 星期五

vi/vim筆記

模式:

  指令模式:
  輸入模式: 在指令模式按i或a進入輸入模式;按Esc離開輸入模式

指令:

 <模式切換>

  i: 進入輸入模式(文字在指標前)
  a: 進入輸入模式(文字在指標後)
  [Esc]: 離開輸入模式

 <指標移動>

  $: 移到行末
  0: 移到行首
  :[num]: 跳到第num行
  %: 跳到對應的括號
  gg: 跳到檔案底一列
  G: 跳到檔案最後一列
  [num][Enter]: 往下跳num行

<修改>

  u: 復原
  [Ctrl]+r: 重作指令
  d [num]: 刪除num行
  dd: 刪除一行
  y [num]: 複製num行
  yy: 複製一行
  p: 從緩衝貼上(刪除或複製的均會存在緩衝)
       (剪下可用刪除+貼上達成)
  v: 字串標記
  V: 行標記

<搜尋與取代>

  /[str]: 往下找出str字串
  ?[str]: 往上找出str字串
  n: 往下搜尋相同字串
  N: 往上搜尋相同字串
  *: 找出指標所在的字串
  :[範圍]s/[比對字串]/[取代字串]/[g,c,i]: 將比對字串取代為取代字串。gic為控制選項。g表示整行全部;c表示取代前確認;i表示不分大小寫
   e.g.
    :%s/abc/def/  :把abc換成def
  :nohlsearch: 暫時關掉highlight
  :noh: 暫時關掉highlight

<存檔>

  :w: 存檔
  :q: 關閉vi

<行首插入>

游標移動到要插入的地方
[Ctrl]+v: 標記行(區塊)
I: 插入文字
[Esc]: 結束插入,標記的行(區塊)會插入文字

e.g.:在行首插入";"
按下[Ctrl]+v標記行

按下I並插入文字

按下Esc,完成插入。

<行尾插入>

  同行首插入,但利用A進入輸入模式,而不是用原本的I

<視窗>

  :new [filename]: 在新視窗開啟filename
  :only: 只保留當前視窗,其餘關閉
  [Ctrl]+w 切換視窗;再按箭頭下切換到下方視窗,再按箭頭上切換到上方視窗。
  :q 同樣也用q關閉視窗

<分頁>

  :tabe [filename]: 在新分頁中開啟檔案
  :tabN: 切換上一個分頁
  :tabn: 切換下一個分頁
  :tabclose: 關掉分頁
  :tabonly: 只保留當前分頁
  另外,在開啟vim時可以將多個檔案開在不同視窗:(利用-p)
  e.g.:
   vim -p <file1> <file2>

<排版>

  =: 自動排版
  e.g.
    ggVG=
    (檔案首行,列模式,檔案底行,自動排版)
  e.g.
    =[num]
    排版num行
Ref:
http://www2.nsysu.edu.tw/csmlab/unix/vi_command.htm
http://awei791129.pixnet.net/blog/post/29353976-%5Blinux%5D%5Bvi%5D-vi-or-vim-%E7%9A%84%E6%90%9C%E5%B0%8B%E5%8F%96%E4%BB%A3%E5%8A%9F%E8%83%BD
http://www.vixual.net/blog/archives/234

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/