# 前言
目前在電腦視覺中大多應用都是使用深度學習,但我認為對於一個研究電腦視覺領域的人來說,且現在許多科技廠仍會使用此技術進行檢測,所以傳統影像處理技還是非常重要的。
雖然在大學和碩士期間也會用影像處理技術對影像做處理,但也只是非常簡單的處理,如二值化、灰階、旋轉等。不過,除了這些,影像處理還有非常多的技術可以學,因此從這篇是我學好影像處理和打好基礎的第一篇。
這是我的學習紀錄,所有範例都是跟著[數位影像處理](https://www.books.com.tw/products/0010923809)這本書的教學及查詢網路上的資料,並使用我自己的方法整理,以及加上自己的看法。
## 最近鄰內插值(Nearest Neighbor Interpolation)(4-3-1)
**定義:**
從原始途中找到離映射點最近的座標值,並取其灰階或彩色值作為內插值
這個方法的好處簡單,異於實現。但由於是透過複製原始圖像中的像素點,所以相鄰的像素的像素點相同,導致容易出現色塊。
舉例說明,假設有一張3*3的圖(src),要將這張圖放大四倍,即3*3->4*4,該如何操作?
==原始圖像(src),如下圖所示:==

- 計算x,y縮放的比例
src_x = dst_x * (src_width / dst_width)
src_y = dst_y * (src_height / dst_height)
- 假設要求目標影像中(0, 3)的像素值
(0*(3/4), 3*(3/4)) -> (0*0.75, 3*0.75)
但由於座標為「整數」,所以將其四捨五入找最接近的值(0, 2)
- 也就是目標圖(0, 3)的像素值等於原始圖(0, 2)的像素值
==所以計算完後,目標圖如下圖所示:==

從上圖的結果可以看出,有許多位置的像素值都是相同的,所以透過這種直接複製像素值的方法,會出現多處鄰近位置的像素值是一樣的,也就是會有色快的產生。
## 雙線性插值(Bilinear interpolation)(4-3-2)
根據上述的說明,當3x3的影像F(x, y)放大為4x4的影像Q(x, y)時,Q(1, 2)對應到F(x=1(3/4), y=2(3/4)) = F(0.75, 1.5),最近鄰插值會直接取F(1, 2)的值代入F(0.75, 1.5),==如下圖所示:==

但是這個方法並不聰明,因為F(0.75, 1.5)周圍有4個像素(DEGH),考量這4個像素加權的影響一定會比單考慮最接近的1個像素來得合理。
**定義:**
雙線性插值就是**考慮四個鄰近點的像素值**來計算出目標位置的像素。計算方法可以透過線性插值(Linear Interpolation)方式推算出兩點之間的任一點的值,實際可分成以下步驟:
- 先從原始影像中找到離目標最近的值
- 計算四個鄰近點座標
- 雙線性插值
- 先對兩個x方向進行插值
- 再對y方向進行插值
---
假設F(x,y)周圍有四個像素分別為F(x0,y0)、F(x1,y0)、F(x0,y1)、F(x1,y1),==如下圖所示:==

- 先對兩個x方向進行現行插值,得到F(x,y0)和F(x,y1)

- 再透過F(x,y0)和F(x,y1)對y方向進行線性插值,得到F(x,y)

所以雙線性插值其實是透過三次的線性插值所構成的算法。
[Source Code Please Visit](https://github.com/ChrisCodeNation/Digital-Image-Processing-with-Python/blob/main/4-3%20影像插值.ipynb)
## 影像插值結果比較
==原始影像,如下圖所示:==

<br>
==Nearest Neighbor vs Billinear Interpolation(放大到(600,600)):==

<br>
==局部放大,如下圖所示:==
