線性插值法是指使用連接兩個已知量的直線來確定在這兩個已知量之間的一個未知量的值的方法。
堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都白烏魚小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站制作營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。
線性插值相比其他插值方式,如拋物線插值,具有簡單、方便的特點。線性插值的幾何意義即為概述圖中利用過A點和B點的直線來近似表示原函數(shù)。線性插值可以用來近似代替原函數(shù),也可以用來計算得到查表過程中表中沒有的數(shù)值。
幾何意義:
線性插值的幾何意義如右圖所示,即為利用過點和的直線來近似原函數(shù)。
應(yīng)用:
1)線性插值在一定允許誤差下,可以近似代替原來函數(shù)。
2)在查詢各種數(shù)值表時,可通過線性插值來得到表中沒有的數(shù)值。
圖像的縮放很好理解,就是像的放大和縮小。傳統(tǒng)的繪畫工具中,有一種叫做“放大尺”的繪畫工具,畫家常用它來放大圖畫。當(dāng)然,在計算機上,我們不再需要用放大尺去放大或縮小圖像了,把這個工作交給程序來完成就可以了。下面就來講講計算機怎么來放大縮小圖象;在本文中,我們所說的圖像都是指點陣圖,也就是用一個像素矩陣來描述圖像的方法,對于另一種圖像:用函數(shù)來描述圖像的矢量圖,不在本文討論之列。
越是簡單的模型越適合用來舉例子,我們就舉個簡單的圖像:3X3 的256級灰度圖,也就是高為3個象素,寬也是3個象素的圖像,每個象素的取值可以是 0-255,代表該像素的亮度,255代表最亮,也就是白色,0代表最暗,即黑色。假如圖像的象素矩陣如下圖所示(這個原始圖把它叫做源圖,Source):
234 38 22
67 44 12
89 65 63
這個矩陣中,元素坐標(biāo)(x,y)是這樣確定的,x從左到右,從0開始,y從上到下,也是從零開始,這是圖象處理中最常用的坐標(biāo)系,就是這樣一個坐標(biāo):
--------------------->X
|
|
|
|
|
∨Y
如果想把這副圖放大為 4X4大小的圖像,那么該怎么做呢?那么第一步肯定想到的是先把4X4的矩陣先畫出來再說,好了矩陣畫出來了,如下所示,當(dāng)然,矩陣的每個像素都是未知數(shù),等待著我們?nèi)ヌ畛洌ㄟ@個將要被填充的圖的叫做目標(biāo)圖,Destination):
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
然后要往這個空的矩陣?yán)锩嫣钪盗耍畹闹祻哪睦飦韥砟??是從源圖中來,好,先填寫目標(biāo)圖最左上角的象素,坐標(biāo)為(0,0),那么該坐標(biāo)對應(yīng)源圖中的坐標(biāo)可以由如下公式得出:
srcX=dstX* (srcWidth/dstWidth) , srcY = dstY * (srcHeight/dstHeight)
好了,套用公式,就可以找到對應(yīng)的原圖的坐標(biāo)了(0*(3/4),0*(3/4))=(0*0.75,0*0.75)=(0,0)
,找到了源圖的對應(yīng)坐標(biāo),就可以把源圖中坐標(biāo)為(0,0)處的234象素值填進去目標(biāo)圖的(0,0)這個位置了。
接下來,如法炮制,尋找目標(biāo)圖中坐標(biāo)為(1,0)的象素對應(yīng)源圖中的坐標(biāo),套用公式:
(1*0.75,0*0.75)=(0.75,0)
結(jié)果發(fā)現(xiàn),得到的坐標(biāo)里面竟然有小數(shù),這可怎么辦?計算機里的圖像可是數(shù)字圖像,象素就是最小單位了,象素的坐標(biāo)都是整數(shù),從來沒有小數(shù)坐標(biāo)。這時候采用的一種策略就是采用四舍五入的方法(也可以采用直接舍掉小數(shù)位的方法),把非整數(shù)坐標(biāo)轉(zhuǎn)換成整數(shù),好,那么按照四舍五入的方法就得到坐標(biāo)(1,0),完整的運算過程就是這樣的:
(1*0.75,0*0.75)=(0.75,0)=(1,0)
那么就可以再填一個象素到目標(biāo)矩陣中了,同樣是把源圖中坐標(biāo)為(1,0)處的像素值38填入目標(biāo)圖中的坐標(biāo)。
依次填完每個象素,一幅放大后的圖像就誕生了,像素矩陣如下所示:
234 38 22 22
67 44 12 12
89 65 63 63
這種放大圖像的方法叫做最臨近插值算法,這是一種最基本、最簡單的圖像縮放算法,效果也是最不好的,放大后的圖像有很嚴(yán)重的馬賽克,縮小后的圖像有很嚴(yán)重的失真;效果不好的根源就是其簡單的最臨近插值方法引入了嚴(yán)重的圖像失真,比如,當(dāng)由目標(biāo)圖的坐標(biāo)反推得到的源圖的的坐標(biāo)是一個浮點數(shù)的時候,采用了四舍五入的方法,直接采用了和這個浮點數(shù)最接近的象素的值,這種方法是很不科學(xué)的,當(dāng)推得坐標(biāo)值為 0.75的時候,不應(yīng)該就簡單的取為1,既然是0.75,比1要小0.25 ,比0要大0.75 ,那么目標(biāo)象素值其實應(yīng)該根據(jù)這個源圖中虛擬的點四周的四個真實的點來按照一定的規(guī)律計算出來的,這樣才能達到更好的縮放效果。雙線型內(nèi)插值算法就是一種比較好的圖像縮放算法,它充分的利用了源圖中虛擬點四周的四個真實存在的像素值來共同決定目標(biāo)圖中的一個像素值,因此縮放效果比簡單的最鄰近插值要好很多。
雙線性內(nèi)插值算法描述如下:
對于一個目的像素,設(shè)置坐標(biāo)通過反向變換得到的浮點坐標(biāo)為(i+u,j+v) (其中i、j均為浮點坐標(biāo)的整數(shù)部分,u、v為浮點坐標(biāo)的小數(shù)部分,是取值[0,1)區(qū)間的浮點數(shù)),則這個像素得值 f(i+u,j+v) 可由原圖像中坐標(biāo)為 (i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所對應(yīng)的周圍四個像素的值決定,即:
f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1) 公式1
其中f(i,j)表示源圖像(i,j)處的的像素值,以此類推。
比如,象剛才的例子,現(xiàn)在假如目標(biāo)圖的象素坐標(biāo)為(1,1),那么反推得到的對應(yīng)于源圖的坐標(biāo)是(0.75 , 0.75), 這其實只是一個概念上的虛擬象素,實際在源圖中并不存在這樣一個象素,那么目標(biāo)圖的象素(1,1)的取值不能夠由這個虛擬象素來決定,而只能由源圖的這四個象素共同決定:(0,0)(0,1)(1,0)(1,1),而由于(0.75,0.75)離(1,1)要更近一些,那么(1,1)所起的決定作用更大一些,這從公式1中的系數(shù)uv=0.75×0.75就可以體現(xiàn)出來,而(0.75,0.75)離(0,0)最遠,所以(0,0)所起的決定作用就要小一些,公式中系數(shù)為(1-u)(1-v)=0.25×0.25也體現(xiàn)出了這一特點;
經(jīng)典,采納吧
其實,這個算法老復(fù)雜了。
最近像素插值算法是最簡單的一種插值算法,當(dāng)圖片放大時,缺少的像素通過直接使用與之最接近的原有的像素的顏色生成,也就是說照搬旁邊的像素。它是三種內(nèi)插值方式中質(zhì)量最差的一種,用該方法修改后的圖像邊緣有鋸齒,但速度較快。
雙線性插值算法是沿水平和垂直方向?qū)χ車袼厝樱缓蠼⑾袼仡伾倲?shù)的平均顏色值。這種算法極大地消除了鋸齒現(xiàn)象,在計算速度與質(zhì)量兩個方面都居于三種方法中間地位。
雙立方插值算法是在水平、垂直和對角線方向?qū)ο袼厝?,然后使用總顏色的加?quán)平均值建立新像素,它是三者中運算速度最慢,但效果最佳的一種。