圖像線性插值演算法
『壹』 常見圖像插值演算法只有3種么
電腦攝像頭最高只有130萬像素的,800萬是通過軟體修改的。
何為數碼插值(軟體插值)
插值(Interpolation),有時也稱為「重置樣本」,是在不生成像素的情況下增加圖像像素大小的一種方法,在周圍像素色彩的基礎上用數學公式計算丟失像素的色彩。簡單地說,插值是根據中心像素點的顏色參數模擬出周邊像素值的方法,是數碼相機特有的放大數碼照片的軟體手段。
一、認識插值的演算法
「插值」最初是電腦術語,後來引用到數碼圖像上來。圖像放大時,像素也相應地增加,但這些增加的像素從何而來?這時插值就派上用場了。插值就是在不生成像素的情況下增加圖像像素大小的一種方法,在周圍像素色彩的基礎上用數學公式計算丟失像素的色彩(也有些相機使用插值,人為地增加圖像的解析度)。所以在放大圖像時,圖像看上去會比較平滑、干凈。但必須注意的是插值並不能增加圖像信息。以圖1為原圖(見圖1),以下是經過不同插值演算法處理的圖片。
1.最近像素插值演算法
最近像素插值演算法(Nearest Neighbour Interpolation)是最簡單的一種插值演算法,當圖片放大時,缺少的像素通過直接使用與之最接近的原有像素的顏色生成,也就是說照搬旁邊的像素,這樣做的結果是產生了明顯可見的鋸齒(見圖2)。
2.雙線性插值演算法
雙線性插值演算法(Bilinear Interpolation)輸出的圖像的每個像素都是原圖中四個像素(2×2)運算的結果,這種演算法極大程度上消除了鋸齒現象(見圖3)。 3.雙三次插值演算法
雙三次插值演算法(Bicubic Interpolation)是上一種演算法的改進演算法,它輸出圖像的每個像素都是原圖16個像素(4×4)運算的結果(見圖4)。這種演算法是一種很常見的演算法,普遍用在圖像編輯軟體、列印機驅動和數碼相機上。 4.分形演算法
分形演算法(Fractal Interpolation)是Altamira Group提出的一種演算法,這種演算法得到的圖像跟其他演算法相比更清晰、更銳利(見圖5)。
現在有許多數碼相機廠商將插值演算法用在了數碼相機上,並將通過演算法得到的解析度值大肆宣傳,固然他們的演算法比雙三次插值演算法等演算法先進很多,但是事實是圖像的細節不是憑空造出來的。因為插值解析度是數碼相機通過自身的內置軟體來增加圖像的像素,從而達到增大解析度的效果。
二、插值的影響
使用數碼變焦拍出來的照片不清晰,這是數碼變焦最遭人垢病的地方,事實上,這只是一種片面的說法。
數碼變焦對照片清晰度的影響有多大,取決於數碼相機在變焦時,CCD是否進行了插值運算。在使用高像素的情況下,如果採用數碼變焦進行拍攝,則此時CCD並不會有任何插值運算,數碼變焦對最終得到的數碼照片的清晰度的影響將會因此而變得極其有限。舉個例子,一台CCD像素為520萬、最大解析度為2560×1920的數碼相機,如果採用2×的數碼變焦來進行拍攝的話,那麼成像過程中只會有一半CCD在工作。換句話說,數碼相機並不會使用類似「在一個像素點周圍添加八個像素點」的插值演算法進行成像,而是通過降低解析度的方法,即1280×960這個解析度指標來進行成像。對於一般的數碼照片來說,1280×960這個解析度指標已經足夠優秀了,它與2560×1920解析度的差別將會因為沒有插值運算的參與而變得可以接受。不過這種現象只限於某些比較高級的數碼相機,對於那些千元以下的定焦數碼相機來說,使用數碼變焦就意味著必然的插值運算,犧牲解析度的後果使得照片拍攝者只能有兩個選擇:要麼得到一張模糊不清的「全尺寸」照片、要麼得到一張質量可以保證但解析度只有類似320×240這樣的「迷你」照片。
『貳』 線性插值法計算公式是什麼
線性插值法計算公式:Y=Y1+(Y2-Y1)×(X-X1)/(X2-X1)。其中Y2>Y1,X2>X>X1。
線性插值是指插值函數為一次多項式的插值方式,其在插值節點上的插值誤差為零。線性插值相比其他插值方式,如拋物線插值,具有簡單、方便的特點。線性插值可以用來近似代替原函數,也可以用來計算得到查表過程中表中沒有的數值。
相關信息:
若函數f(x)在自變數x一些離散值所對應的函數值為已知,則可以作一個適當的特定函數p(x),使得p(x)在這些離散值所取的函數值,就是f(x)的已知值。從而可以用p(x)來估計f(x)在這些離散值之間的自變數所對應的函數值,這種方法稱為插值法。
如果只需要求出某一個x所對應的函數值,可以用「圖解內插」。它利用實驗數據提供要畫的簡單曲線的形狀,然後調整它,使得盡量靠近這些點。
如果還要求出因變數p(x)的表達式,這就要用「表格內插」。通常把近似函數p(x)取為多項式(p(x)稱為插值多項式),最簡單的是取p(x)為一次式,即線性插值法。
在表格內插時,使用差分法或待定系數法(此時可以利用拉格朗日公式)。在數學、天文學中,插值法都有廣泛的應用。
『叄』 線性插值法計算公式是什麼
線性插值法計算公式:Y=Y1+(Y2-Y1)×(X-X1)/(X2-X1)。其中Y2>Y1,X2>X>X1。線性插值是指插值函數為一次多項式的插值方式,其在插值節點上的插值誤差為零。線性插值相比其他插值方式,如拋物線插值,具有簡單、方便的特點。線性插值可以用來近似代替原函數,也可以用來計算得到查表過程中表中沒有的數值。
線性插值使用的原因
目前,線性插值演算法使用比較廣泛。在很多場合我們都可以使用線性插值。其中,最具代表性的使用方法是變數之間的對應關系沒有明確的對應關系,無法使用公式來描述兩個變數之間的對應關系,在這種情況下使用線性插值是比較好的解決辦法。可以在變數的變化區間上取若干個離散的點,以及對應的輸出值,然後將對應關系分成若干段,當計算某個輸入對應的輸出時,可以進行分段線性插值。
『肆』 線性插值法是什麼
線性插值法
線性插值是數學、計算機圖形學等領域廣泛使用的一種簡單插值方法。
假設我們已知坐標(x0,y0)與(x1,y1),要得到[x0,x1]區間內某一位置x在直線上的值。根據圖中所示,我們得到(y-y0)(x-x0)/(y1-y0)(x1-x0)
假設方程兩邊的值為α,那麼這個值就是插值系數—從x0到x的距離與從x0到x1距離的比值。由於x值已知,所以可以從公式得到α的值
α=(x-x0)/(x1-x0)
同樣,α=(y-y0)/(y1-y0)
這樣,在代數上就可以表示成為:
y = (1- α)y0 + αy1
或者,
y = y0 + α(y1 - y0)
這樣通過α就可以直接得到 y。實際上,即使x不在x0到x1之間並且α也不是介於0到1之間,這個公式也是成立的。在這種情況下,這種方法叫作線性外插—參見 外插值。
已知y求x的過程與以上過程相同,只是x與y要進行交換。
『伍』 雙線性插值法原理 python實現
碼字不易,如果此文對你有所幫助,請幫忙點贊,感謝!
一. 雙線性插值法原理:
① 何為線性插值?
插值就是在兩個數之間插入一個數,線性插值原理圖如下:
② 各種插值法:
插值法的第一步都是相同的,計算目標圖(dstImage)的坐標點對應原圖(srcImage)中哪個坐標點來填充,計算公式為:
srcX = dstX * (srcWidth/dstWidth)
srcY = dstY * (srcHeight/dstHeight)
(dstX,dstY)表示目標圖像的某個坐標點,(srcX,srcY)表示與之對應的原圖像的坐標點。srcWidth/dstWidth 和 srcHeight/dstHeight 分別表示寬和高的放縮比。
那麼問題來了,通過這個公式算出來的 srcX, scrY 有可能是小數,但是原圖像坐標點是不存在小數的,都是整數,得想辦法把它轉換成整數才行。
不同插值法的區別就體現在 srcX, scrY 是小數時,怎麼將其變成整數去取原圖像中的像素值。
最近鄰插值(Nearest-neighborInterpolation):看名字就很直白,四捨五入選取最接近的整數。這樣的做法會導致像素變化不連續,在目標圖像中產生鋸齒邊緣。
雙線性插值(Bilinear Interpolation):雙線性就是利用與坐標軸平行的兩條直線去把小數坐標分解到相鄰的四個整數坐標點。權重與距離成反比。
雙三次插值(Bicubic Interpolation):與雙線性插值類似,只不過用了相鄰的16個點。但是需要注意的是,前面兩種方法能保證兩個方向的坐標權重和為1,但是雙三次插值不能保證這點,所以可能出現像素值越界的情況,需要截斷。
③ 雙線性插值演算法原理
假如我們想得到未知函數 f 在點 P = (x, y) 的值,假設我們已知函數 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四個點的值。最常見的情況,f就是一個像素點的像素值。首先在 x 方向進行線性插值,然後再在 y 方向上進行線性插值,最終得到雙線性插值的結果。
④ 舉例說明
二. python實現灰度圖像雙線性插值演算法:
灰度圖像雙線性插值放大縮小
import numpy as np
import math
import cv2
def double_linear(input_signal, zoom_multiples):
'''
雙線性插值
:param input_signal: 輸入圖像
:param zoom_multiples: 放大倍數
:return: 雙線性插值後的圖像
'''
input_signal_cp = np.(input_signal) # 輸入圖像的副本
input_row, input_col = input_signal_cp.shape # 輸入圖像的尺寸(行、列)
# 輸出圖像的尺寸
output_row = int(input_row * zoom_multiples)
output_col = int(input_col * zoom_multiples)
output_signal = np.zeros((output_row, output_col)) # 輸出圖片
for i in range(output_row):
for j in range(output_col):
# 輸出圖片中坐標 (i,j)對應至輸入圖片中的最近的四個點點(x1,y1)(x2, y2),(x3, y3),(x4,y4)的均值
temp_x = i / output_row * input_row
temp_y = j / output_col * input_col
x1 = int(temp_x)
y1 = int(temp_y)
x2 = x1
y2 = y1 + 1
x3 = x1 + 1
y3 = y1
x4 = x1 + 1
y4 = y1 + 1
u = temp_x - x1
v = temp_y - y1
# 防止越界
if x4 >= input_row:
x4 = input_row - 1
x2 = x4
x1 = x4 - 1
x3 = x4 - 1
if y4 >= input_col:
y4 = input_col - 1
y3 = y4
y1 = y4 - 1
y2 = y4 - 1
# 插值
output_signal[i, j] = (1-u)*(1-v)*int(input_signal_cp[x1, y1]) + (1-u)*v*int(input_signal_cp[x2, y2]) + u*(1-v)*int(input_signal_cp[x3, y3]) + u*v*int(input_signal_cp[x4, y4])
return output_signal
# Read image
img = cv2.imread("../paojie_g.jpg",0).astype(np.float)
out = double_linear(img,2).astype(np.uint8)
# Save result
cv2.imshow("result", out)
cv2.imwrite("out.jpg", out)
cv2.waitKey(0)
cv2.destroyAllWindows()
三. 灰度圖像雙線性插值實驗結果:
四. 彩色圖像雙線性插值python實現
def BiLinear_interpolation(img,dstH,dstW):
scrH,scrW,_=img.shape
img=np.pad(img,((0,1),(0,1),(0,0)),'constant')
retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)
for i in range(dstH-1):
for j in range(dstW-1):
scrx=(i+1)*(scrH/dstH)
scry=(j+1)*(scrW/dstW)
x=math.floor(scrx)
y=math.floor(scry)
u=scrx-x
v=scry-y
retimg[i,j]=(1-u)*(1-v)*img[x,y]+u*(1-v)*img[x+1,y]+(1-u)*v*img[x,y+1]+u*v*img[x+1,y+1]
return retimg
im_path='../paojie.jpg'
image=np.array(Image.open(im_path))
image2=BiLinear_interpolation(image,image.shape[0]*2,image.shape[1]*2)
image2=Image.fromarray(image2.astype('uint8')).convert('RGB')
image2.save('3.png')
五. 彩色圖像雙線性插值實驗結果:
六. 最近鄰插值演算法和雙三次插值演算法可參考:
① 最近鄰插值演算法: https://www.cnblogs.com/wojianxin/p/12515061.html
https://blog.csdn.net/Ibelievesunshine/article/details/104936006
② 雙三次插值演算法: https://www.cnblogs.com/wojianxin/p/12516762.html
https://blog.csdn.net/Ibelievesunshine/article/details/104942406
七. 參考內容:
https://www.cnblogs.com/wojianxin/p/12515061.html
https://blog.csdn.net/Ibelievesunshine/article/details/104939936