1. 程式人生 > >影象縮放--最近鄰插值

影象縮放--最近鄰插值

參考https://blog.csdn.net/wmn7q/article/details/52743284 自己一直以為放大影象是會放大畫素點的大小的,然後就去查了一下,發現不是這樣的,而是畫素點數量變了,而多的或者少的就依靠插值來實現

百度問答 這裡的答案我覺得不錯,解決了我的問題 在這裡插入圖片描述 那麼我們就來實現一下放縮的演算法,今天先實現以下第一種–近鄰插值 原理:關鍵在於構造對映 在這裡插入圖片描述 看得清就好。

放一個連結,也是講原理的,我覺得寫得也是不錯的。 csdn上的 程式碼:

(*構造對映 [1,w1] \[Rule] [1,w0]*)
zoom[pic_, fw_, fh_] := 
 Module[{data, dataN, w0, h0, w1, h1, col, i, j},
  data = ImageData[pic];
  {w0, h0, col} = Dimensions[data];
  w1 = w0 * fw;
  h1 = h0* fh;
  
  (*對每一個畫素點取最接近的點*)
  
  (*使用這種情況會出現下標為零的情況*)
  
  (*
  dataN = Table[data[[Round[(w0-1)/(w1-1)*i-(w0+w1-2)/(w1-1)],
  Round[(h0-1)/(h1-1)*j-(h0+h1-2)/(h1-1)]]],{i,1,w1},{j,1,h1}];
  *)
  
  dataN = 
   Table[data[[Round[(w0 - 1)/(w1 - 1)*i + (w1 - w0)/(w1 - 1)], 
     Round[(h0 - 1)/(h1 - 1)*j + (h1 - h0)/(h1 - 1)]]], {i, 1, 
     w1}, {j, 1, h1}];
  
  Image[dataN]
  (*Image[dataN]*)
  ]

效果: 縮小 在這裡插入圖片描述 放大 在這裡插入圖片描述 其實我覺得這樣子效果挺好的,換一副圖看一下,可以看出鋸齒 在這裡插入圖片描述 可以看到放大了以後還是會在邊緣有鋸齒,不過大體還可以,而且這種演算法比較快