最近邻插值法(nearest_neighbor)
生活随笔
收集整理的這篇文章主要介紹了
最近邻插值法(nearest_neighbor)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、原理與應用
????????最近鄰插值法nearest_neighbor是最簡單的灰度值插值。也稱作零階插值,就是令變換后像素的灰度值等于距它最近的輸入像素的灰度值。最近鄰插值法可應用于圖像的縮放,因為簡單的變換與計算,效果一般不好。
????????先假設一個2X2像素的圖片采用最近鄰插值法需要放大到4X4像素的圖片,右邊?該為多少。
2、公式及計算
最近鄰插值法坐標變換計算公式(這個更簡潔一點):
AX=BX*(AW/BW)
AY=BY*(AH/BH)
- BX與BY為目標圖像的某個像素的橫縱坐標
- BW與BH為目標圖像的長與寬
- AW與AH為原圖像的寬度與高度
- AX,AY為目標圖像在該點(BX,BY)對應的原圖像的坐標
????????如果是放大圖像,(AW/BW)值小于1,同樣將BX同比例映射到原圖像的AX中,如果AW/BW=1,就相當于復制了圖片。
????????右圖為經過放大后的目標圖像,?處的坐標為(3,2),根據公式計算得到?
?????????AX=3*(2/4)=1.5,?AY=2*(2/4)=1
????????故?處的像素應該為原圖像中的(1.5,1)像素的值,但是像素坐標沒有小數,一般采用四舍五入取最鄰,所以最終的結果為(2,1),對應原圖像的橙色。其他類比得到放大后的圖像:
3、代碼實現?
""" @author: 緋雨千葉最鄰近插值法 AX=BX*(AW/BW) AY=BY*(AH/BH) A為原圖,B為目標圖 """ import cv2 import numpy as npdef nearest_1(img1): # 手動版,需要自己設置目標圖寬和高h1, w1, channels = img1.shape # 取彩色圖片的長、寬、通道h2 = 550 # 手動設置目標圖像的高和寬w2 = 570img_n = np.zeros((h2, w2, channels), np.uint8) for i in range(h2):for j in range(w2):AX = int(i * (h1 / h2))AY = int(j * (w1 / w2))img_n[i, j] = img1[AX, AY]return img_ndef nearest_2(img1): # 自動倍數版,可以直接設置放大縮小的倍數h1, w1, channels = img1.shape # 取彩色圖片的長、寬、通道scale = 1.5 # 直接設置倍率,>1為放大,<1為縮小,暫不考慮負數h2= int(h1 * scale)w2= int(w1 * scale)img_n = np.zeros((h2, w2, channels), np.uint8)for i in range(h2):for j in range(w2):AX = int(i / scale)AY = int(j / scale)img_n[i, j] = img1[AX, AY]return img_nimg1 = cv2.imread("../img/lrn.jpg") # 輸入原圖 img2 = nearest_1(img1) img3 = nearest_2(img1) cv2.imshow("img1", img1) cv2.imshow("nearest_1", img2) # 手動設置高寬版 cv2.imshow("nearest_2", img3) # 自動寫倍率版 cv2.waitKey(0)效果展示 :
總結
以上是生活随笔為你收集整理的最近邻插值法(nearest_neighbor)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言实现分治法求第K大元素(详细解释)
- 下一篇: 解决访问Github图片无法加载的小妙招