當前位置:首頁 » 操作系統 » 雙立方插值演算法

雙立方插值演算法

發布時間: 2023-03-26 13:31:23

① Matlab中插值函數

MATLAB中的插值函數為interp1,其調用格式為: yi= interp1(x,y,xi,'method') 其中x,y為插值點,yi為在被插值點xi處的插值結果;x,y為向量, 'method'表示採用的插值方法,MATLAB提供的插值方法有幾種: 'method'是最鄰近插值, 'linear'線性插值; 'spline'三次樣條插值; 'cubic'立方插值.預設時表示線性插值。 注意:所有的插值方法都要求x是單調的,並且xi不能夠超過x的范圍。 例:在一 天24小時內,從零點開始每間隔2小時測得的環境溫度數據分別為 12,9,9,10,18 ,24,28,27,25,20,18,15,13 問題:推測中午12點(即13點)時的溫度. 功能 一維數據插值(表格查找)。該命令對數據點之間計算內插值。它找出一元函數f(x)在中間點的數值。其中函數f(x)由所給數據決定。 x:原始數據點 Y:原始數據點 xi:插值點 Yi:插值點 (1)yi = interp1(x,y,xi,method) 用指定的演算法計算插值: 』nearest』:最近鄰點插值,直接完成計算; 』linear』:線性插值(預設方式),直接完成計算; 』spline』:三次樣條函數插值。 』cubic』:該方法保留單調性與數據的外形; 功能 二維數據內插值 (1)ZI = interp2(X,Y,Z,XI,YI,method) 返回矩陣ZI,其元素包含對應於參量XI 與YI(可以是向量、或同型矩陣) 的元素, 即Zi(i,j) ←[Xi(i,j),yi(i,j)]。用戶可以輸入行向量和列向量Xi 與Yi,此時,輸出向量Zi 與矩陣meshgrid(xi,yi)是同型的。 (2)ZI = interp2(Z,XI,YI) 預設地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一種情形進行計算。 用指定的演算法method 計算二維插值: 』linear』:雙線性插值演算法(預設演算法); 』nearest』:最臨近插值; 』spline』:三次樣條插值; 』cubic』:雙三次插值。 (4)VI = interp3(X,Y,Z,V,XI,YI,ZI,method) 找出由參量X,Y,Z決定的三元函數V=V(X,Y,Z)在點(XI,YI,ZI)的值。 %用指定的演算法method 作插值計算: 『linear』:線性插值(預設演算法); 『cubic』:三次插值; 『spline』:三次樣條插值; 『nearest』:最鄰近插值。 功能 數據格點 (1)ZI = griddata(x,y,z,XI,YI,method) 用二元函數z=f(x,y)的曲面擬合有不規則的數據向量x,y,z。griddata 將返回曲面z 在點(XI,YI)處的插值。曲面總是經過這些數據點(x,y,z)的輸入參量(XI,YI)通常是規則的格點(像用命令meshgrid 生成的一樣)。 用指定的演算法method 計算: 『linear』:基於三角形的線性插值(預設演算法); 『cubic』: 基於三角形的三次插值; 『nearest』:最鄰近插值法; 『v4』:MATLAB 4 中的griddata 演算法。 功能 三次樣條數據插值 格式 (1)yy = spline(x,y,xx) 功能 生成用於畫三維圖形的矩陣數據 格式 [X,Y] = meshgrid(x,y) 將由向量x,y(可以是不同方向的)指定的區域[min(x),max(x) , min(y) , max(y)] 用直線x=x(i),y=y(j) ( i=1,2,…,length(x) ,j=1,2,…,length(y))進行劃分。這樣,得到了length(x)*length(y)個點, 這些點的橫坐標用矩陣X 表示,X 的每個行向量與向量x 相同;這些點的縱坐標用矩陣Y 表示,Y 的每個列向量與向量y 相同。其中X,Y可用於計算二元函數z=f(x,y)與三維圖形中xy 平面矩形定義域的劃分或曲面作圖。 [X,Y] = meshgrid(x) %等價於[X,Y]=meshgrid(x,x)。 [X,Y,Z] = meshgrid(x,y,z) %生成三維陣列X,Y,Z,用於計算三元函數v=f(x,y,z)或三維容積圖。

② 數字圖像處理——圖像插值

網上有很多介紹插值演算法的,但感覺收獲都不大

介紹三種圖像插值演算法:最近鄰內插,雙線性內插,雙三次內插(雙立方內插)

三次插值即用三階多項式擬合原函數(也應該有其他用途)。假設三次擬合函數為

在matlab中,圖像被定義為一個三維向量,若不考慮圖像的通道數,可以將圖像看作一個二維矩陣處理。matlab圖像矩陣中坐標值映射到二維坐標系中,每一個像素塊對應的是一個點,但實際的像素塊是有一定尺寸的。

在進行雙線性插值和雙三次插值時,需要用坐標值擬合函數,為了簡化計算,總是選取 作為局部坐標系原點,其中 為待插值坐標。

當出現這些情況時,補充這些像素的灰度值為圖像內最相鄰像素塊的灰度值。

進行坐標變換後,選取與內插點 歐式距離最近的像素值進行插值。在程序中,使用將 按照四捨五入的舍入方式選取最近鄰的像素塊。

雙線性內插是線性內插的二維實現,在x維度先進行線性插值,再由得到的值對y維度進行插值。在局部坐標系中,選取 相鄰的四個像素進行雙線性內插。由在數學原理中的推導可知

雙三次內插是三次插值的二維實現。選取與 相鄰的16個像素進行雙三次內插,局部坐標系中x與y坐標范圍均為 。由數學原理中的推到可知

最近鄰插值法的優點是計算量很小,運算速度較快。但它僅使用離待測采樣點最近的像素的灰度值作為該采樣點的灰度值,而沒考慮其他相鄰像素點的影響,因而重新采樣後灰度值有明顯的不連續性,會產生明顯的馬賽克和鋸齒現象。

雙線性插值法效果要好於最近鄰插值,計算量較大。縮放後圖像質量高,基本克服了最近鄰插值灰度值不連續的特點,因為它考慮了待測采樣點周圍四個直接鄰點對該采樣點的相關性影響。但是,此方法未考慮到各鄰點間灰度值變化率的影響, 具有低通濾波器的性質, 從而導致縮放後圖像的高頻分量受到損失, 圖像邊緣在一定程度上變得較為模糊,丟失了一些細節信息。

雙立方插值計算量最大,運算速度慢。雙立方插值用三階函數逼近,不僅考慮到周圍四個直接相鄰像素點灰度值的影響,還考慮到它們灰度值變化率的影響,能夠產生比雙線性插值更為平滑的邊緣,計算精度很高,處理後的圖像細節損失最少,效果最佳。

③ 圖像雙三次插值演算法原理及python實現

一. 圖像雙三次插值演算法原理:

        假設源圖像 A 大小為 m*n ,縮放後的目標圖像 B 的大小為 M*N 。那麼根據比例我們可以得到 B(X,Y) 在 A 上的對應坐標為 A(x,y) = A( X*(m/M), Y*(n/N) ) 。在雙線性插值法中,我們選取 A(x,y) 的最近四個點。而在雙立方插值法中,我們選取的是最近的16個像素點作為計算目標圖像 B(X,Y) 處像素值的參數。如圖所示:

        如圖所示 P 點就是目標圖像 B 在 (X,Y) 處對應於源圖像中的位置,P 的坐標位置會出現小數部分,所以我們假設 P 的坐標為 P(x+u,y+v),其中 x,y 分別表示整數部分,u,v 分別表示小數部分。那麼我們就可以得到如圖所示的最近 16 個像素的位置,在這里用 a(i,j)(i,j=0,1,2,3) 來表示。 

        雙立方插值的目的就是通過找到一種關系,或者說系數,可以把這 16 個像素對於 P 處像素值的影響因子找出來,從而根據這個影響因子來獲得目標圖像對應點的像素值,達到圖像縮放的目的。 

        BiCubic基函數形式如下:

二. python實現雙三次插值演算法

from PIL import Image

import numpy as np

import math

# 產生16個像素點不同的權重

def BiBubic(x):

    x=abs(x)

    if x<=1:

        return 1-2*(x**2)+(x**3)

    elif x<2:

        return 4-8*x+5*(x**2)-(x**3)

    else:

        return 0

# 雙三次插值演算法

# dstH為目標圖像的高,dstW為目標圖像的寬

def BiCubic_interpolation(img,dstH,dstW):

    scrH,scrW,_=img.shape

    #img=np.pad(img,((1,3),(1,3),(0,0)),'constant')

    retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)

    for i in range(dstH):

        for j in range(dstW):

            scrx=i*(scrH/dstH)

            scry=j*(scrW/dstW)

            x=math.floor(scrx)

            y=math.floor(scry)

            u=scrx-x

            v=scry-y

            tmp=0

            for ii in range(-1,2):

                for jj in range(-1,2):

                    if x+ii<0 or y+jj<0 or x+ii>=scrH or y+jj>=scrW:

                        continue

                    tmp+=img[x+ii,y+jj]*BiBubic(ii-u)*BiBubic(jj-v)

            retimg[i,j]=np.clip(tmp,0,255)

    return retimg

im_path='../paojie.jpg'

image=np.array(Image.open(im_path))

image2=BiCubic_interpolation(image,image.shape[0]*2,image.shape[1]*2)

image2=Image.fromarray(image2.astype('uint8')).convert('RGB')

image2.save('BiCubic_interpolation.jpg')

三. 實驗結果:

四. 參考內容:

         https://www.cnblogs.com/wojianxin/p/12516762.html

         https://blog.csdn.net/Ibelievesunshine/article/details/104942406

④ 怎樣圖象放大但是不變模糊

插值演算法與圖像解析度

盡管軟體計算不能真正提高照片的解析度,但使用好的插值演算法提高照片的像素數,可以使輸出效果大為改善。Photoshop通過某些插值的計算方法,在周圍像素色彩的基礎上用數學公式計算丟失像素的色彩,可以增加一些不存在的像素,使圖像看上去平滑、干凈。在Photoshop里插值演算法有三種:最近像素插值演算法(Nearest Neighbor interpolation)、雙線性插值演算法(Bilinear interpolation)、雙立方插值演算法(Bicubic interpolation)。

最近像素插值演算法是最簡單的一種插值演算法,當圖片放大祥吵時,缺少的像素通過直接使用與之最接近的原有的像素的顏色生成,也就是說照搬旁邊的像素。它是三種內插值方式中質量最差的一種,用該方法修改後的圖像邊緣有鋸齒,但速度較快。

雙線性插值演算法是沿水平和垂直方向對周謹殲侍圍像素取樣,然後建立像素顏色總數的平均顏色值。這種演算法極大地消除了鋸齒現象,在計算速度與質量兩改慧個方面都居於三種方法中間地位。

雙立方插值演算法是在水平、垂直和對角線方向對像素取樣,然後使用總顏色的加權平均值建立新像素,它是三者中運算速度最慢,但效果最佳的一種。

對於不同的對象,使用合理的插值演算法可以達到理想的效果。分為以下兩種情況:

1. 對於以單線條為主的圖形,如屏幕上的對話框、菜單欄、圖標、文字、線條稿等:

下圖為使用Print Screen鍵直接拷貝屏幕的原始圖像,及通過插值演算法放大3倍。

⑤ 【圖像縮放演算法】雙立方(三次)插值

當我們進行圖像縮放的時候,我們就需要用到插值演算法。常見的插值有:

用雙立方插值得到的結果圖笑沖搭上的某個像素是由原圖上的16個像素值進行判坦加權平均得到。所以接下來關鍵點就是如何求解對應的16個像素位置以及各自的系數。

最後,我們將所有的像素點乘以其對應的系數並加權相碰拿加就得到我們最後所求點的像素值。公式如下:

熱點內容
c語言點陣字模 發布:2024-04-26 22:19:35 瀏覽:918
光加密 發布:2024-04-26 22:15:28 瀏覽:352
aspnet經典源碼 發布:2024-04-26 22:14:46 瀏覽:135
linux編譯提示缺少build 發布:2024-04-26 22:14:34 瀏覽:415
編譯opengl 發布:2024-04-26 21:57:32 瀏覽:506
ubuntu查找文件夾 發布:2024-04-26 21:48:18 瀏覽:203
qq瀏覽器wifi助手怎麼查看密碼 發布:2024-04-26 21:48:18 瀏覽:669
在線安裝androidsdk 發布:2024-04-26 21:42:33 瀏覽:480
杭州地鐵wifi密碼是多少 發布:2024-04-26 21:32:45 瀏覽:320
重裝系統源碼 發布:2024-04-26 21:32:44 瀏覽:275