1. 程式人生 > >最臨近、雙線性、三次卷積插值演算法比較

最臨近、雙線性、三次卷積插值演算法比較

 //原文:http://blog.csdn.net/google0802/article/details/8938849

【我只是想把最近鄰這個弄過來╮(╯-╰)╭ 】

插值演算法對於縮放比例較小的情況是完全可以接受的,令人信服的。一般的,縮小0.5倍以上或放大3.0倍以下,對任何影象都是可以接受的。常用的插值方法有:最近鄰插值法,雙線性插值法,三次卷積插值法

1.最近鄰插值法(Nearest Neighbor Interpolation)

        最近鄰插值法又稱零階插值,該方法取距離輸出影象上的畫素點對映到輸入影象上的位置最近的輸入畫素的顏色值(或灰度值)作為輸出影象上畫素點的顏色值(或灰度值)。如圖1所示,最近鄰插值法直接計算輸出畫素對映到輸入影象座標系下的點u和近鄰四點(n1,n2,n3,n4)之間的距離,取距離u最近的畫素點的顏色值(或灰度值)賦給u。

       g(x',y')=f(int(x十0.5),int(y+0.5))     -------------------(1)             
       
公式(1)為最近鄰插值的具體計算公式。其中g(x',y')為輸出影象中座標為(x',y')的畫素點的顏色值(或灰度值),f(x,y)為輸入影象中座標為(x,y)的畫素點的顏色值(或灰度值),(x,y)為輸出影象上的座標(x',y')對映到輸入影象座標系下的座標。int(x)為取整運算。

2.雙線性插值法(Bilinear Interpolation)

雙線性插值法又稱一階插值,利用輸入影象中與輸出影象畫素點對映位置最鄰近的4個畫素點的顏色值(或灰度值)計算輸出影象中畫素點的顏色值(或灰度值)。如圖2所示

圖2中,假設輸出影象上的一個畫素點g(x',y')其座標為(x',y'),它對映到輸入影象中的點u其座標為(x,y)。n1,n2,n3,n4為與點u最鄰近的四個點,其座標分別為(i,j),(i+1,j),(i,j+1),(i+1,j+1),顏色值(或灰度值)分別為f(i,j),f(i+1,j),f(i,j+1),f(i+1,j+1)。則雙線性插值的計算公式為公式(2),其中u=(x-i),v=(y-j)。
g(x',y')=(1-u)(1-v)f(i,j) + u(1-v)f(i+1,j) + (1-u)vf(i,j+1) + uvf(i+1,j+1)  ---------------(2)

3.三次卷積插值法

為了得到更精確的(x',y')的顏色值(或灰度值)g(x',y'),就不僅需要考慮與(x',y')點最鄰近的四個點對它的影響,還要考慮到該點周圍16個相鄰點的顏色值(或灰度值)對它的影響。如圖3所示。

 由連續訊號取樣定理可知,若對取樣值用插值函式s(x)=sin(πx)/(πx)插值,則可以準確地恢復原函式,也就是說可以準確地得到取樣點間任意點的值"三次卷積插值法實質上就是利用一個三次多項式來近似理論上最佳插值函式S(x),如公式(3)。

         -----------(3)

目的畫素值f(i+u,j+v)可由如下插值公式得到:

    f(i+u,j+v) = [A] * [B] * [C]

其中:

[A]=[ S(u + 1) S(u + 0) S(u - 1) S(u - 2) ]

         ┏     f(i-1, j-1)  f(i-1, j+0)  f(i-1, j+1)  f(i-1, j+2)   ┓
        [B]=┃     f(i+0, j-1) f(i+0, j+0) f(i+0, j+1) f(i+0, j+2)  ┃
         ┃     f(i+1, j-1) f(i+1, j+0) f(i+1, j+1) f(i+1, j+2)  ┃
         ┗     f(i+2, j-1) f(i+2, j+0) f(i+2, j+1) f(i+2, j+2)  ┛

          ┏   S(v + 1)  ┓
        [C]=┃   S(v + 0)  ┃
          ┃   S(v - 1)   ┃
          ┗   S(v - 2)   ┛

 最鄰近插值(近鄰取樣法)、雙線性內插值、三次卷積法等插值演算法對於旋轉變換、錯切變換、一般線性變換 和 非線性變換 都適用。

        不同的插值方法,具有不同的特點和優缺點"最鄰近插值法計算簡單,工作量小,但處理後的影象邊緣容易產生鋸齒效應造成影象的不連續;三次卷積插值法帶有邊緣增強的效果,能夠較好的保持影象的細微結構,但計算量很大;雙線性插值法克服了最鄰近法不連續的缺點,計算較三次卷積法簡單,但邊緣受到平滑作用出現輪廓模糊現象。

相關推薦

臨近線性演算法比較

 //原文:http://blog.csdn.net/google0802/article/details/8938849 【我只是想把最近鄰這個弄過來╮(╯-╰)╭ 】 插值演算法對於縮放比例較小的情況是完全可以接受的,令人信服的。一般的,縮小0.5倍以上或放大3.

近鄰線性

轉載最鄰近插值(近鄰取樣法):  最臨近插值的的思想很簡單。對於通過反向變換得到的的一個浮點座標,對其進行簡單的取整,得到一個整數型座標,這個整數型座標對應的畫素值就是目的畫素的畫素值,也就是說,取浮點座標最鄰近的左上角點(對於DIB是右上角,因為它的掃描行是逆序儲存的)對應

臨近 線性 (影象放縮)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

樣條演算法的C++實現

標頭檔案: /* * Copyright (c) 2008-2011 Zhang Ming (M. Zhang), [email protected] * * This program is free software; you can redistri

C++實現樣條演算法

程式中函式說明: 用float f(int x1, int x2, int x3)來寫函式; 用void cal_m(int n)來解係數; 用void printout(int n)來確定次數。 三次樣條插值演算法(壓緊樣條)原始碼: //#incl

Matlab 演算法鄰近線性

1、最鄰近元法 這是最簡單的一種插值方法,不需要計算,在待求象素的四鄰象素中,將距離待求象素最近的鄰象素灰度賦給待求象素。設i+u, j+v(i, j為正整數, u, v為大於零小於1的小數,下同)為待求象素座標,則待求象素灰度的值 f(i+u, j+v) 如下圖所示:

【影象縮放】立方((Android版改寫)

最近在做圖片放大之後的畫面處理,嘗試了這種卷積插值法,原文如下:https://dailc.github.io/2017/11/01/imageprocess_bicubicinterpolation.html 然後我將其工程簡單地改寫成了Android版本的程式碼(只是個Demo,用來看看效果

fortran樣條程式例項

Program testspline implicit none integer :: i integer, parameter :: n = 50, m = 100, dp = 8 real(dp) :: x(n), y

MATLAB 樣條原始碼

MATLAB 原始碼: function yy = Interpolation_Spline0(x, y, xx) %{ 函式功能:三次樣條插值法; 輸入: x:已知點橫座標; y:已知點縱座標; xx:插值點; 輸出: yy:插值點的函式值; 示例: clear; clc; x

數值分析用matlab求解樣條多項式

數值分析用matlab求解三次樣條插值多項式 時間真快,2018年只剩下2天,2019年即將來臨! 今晚整理筆記本中的資料,看了下之前給朋友解答的一個《數值分析》實驗題目,還是有點意思。不管怎樣,分享給需要的朋友,希望有所幫助! 給定函式,及節點如下: 求其三次樣條插值多項式(

曲線座標系與直角座標系轉換(二)——基礎:樣條原理(cubic spline)

一、引入 上一篇提到插值多項式,幾次函式就稱為幾次樣條函式如, 二次樣條函式為:f(x) = a*x^2 + b*x + c 三次樣條函式為:f(x) = a*x^3 + b^x^2 + c*x +d x=[1,3,5,7,9]; y=[2,4,6,8,10];有5個節點,4個區

Cubic spline(樣條)(轉載)

轉自:http://blog.csdn.net/lsxpu/article/details/38849775 自己以前上過數值分析這門課,用的是[1]這本教材,三次樣條插值這一節,當時似乎看明白了,但在實際碰到它時,總覺得很神祕,也很心虛。過了好幾年之後,想徹底理解這個

用matlab程式實現求解樣條

X =[ 0,0.2,0.4,0.6,0.8,1.0]; Y=[1.0, 0.818732, 0.670320, 0.548812, 0.449329, 0.367879]; cs = csapi(

Matlab 樣條多項式表示

Matlab Spline pp.coefs 如何運用MATLAB 三次樣條插值的問題,今天做作業,突然想用Matlab搞搞。 題目如下: 清華大學出版社的《數值分析(第5版)》 P49,20題。 x=[0.25 0.3 0.39 0.45 0.53]; y=[ 0

Cocos2D-X2.2.3學習筆記8(處理精靈單擊擊和連擊事件)

屏幕 () rtu cati 輸出 public exit 什麽是 avi 我們依據上一次介紹的觸屏事件和事件隊列等知識來實現觸屏的單擊,雙擊,三連擊事件。 下圖為我們實現的效果圖: 單擊精靈跳躍一個高度, 雙擊精靈跳躍的高度比單擊的高 三連擊精靈跳躍的跟高

python之路 -- 單引號引號&引號

span 區別 執行 跨行 註銷 bold 雙引號 int col 單引號與雙引號完全一模一樣;沒有區別。例如: print(‘hello, world!‘)print("hello, world!")執行結果都是輸出:hello,world! 三引號可以表示註銷和

日常學習隨筆-數組單鏈表鏈表種形式實現棧結構的基本操作

ext return lse efi CA 需要 kde 當前 default 一、棧結構   棧(stack)是限制插入和刪除只能在一個位置上的表,該位置是 表的末端,叫做棧的頂(Top)。對棧的基本操作有push(進棧),pop(出棧),peak(棧頂元素),size(

web服務-1http協議的握手四揮手

sof close 基本 通信 無法 mage 數據 web 發送 知識點:http協議:它是基於tcp協議的,瀏覽器訪問服務器,服務器把資源回給瀏覽器,這個過程都是遵循http協議的,否則無法完成,http早些年是1.0版本,現在基本上都是1.1版本了,倆個版本的區別就是

python--基礎學習()字串單引號引號引號

#單引號str1='python'#單引號中使用雙引號str2='"python"'#雙引號中使用單引號str3="'python'"#三單引號str4='''python'''#三單引號中間使用雙引號str5='''"python"'''#三單引號中有換行符str6='''hellopython'''#

簡述python單引號引號引號的場景和區別

今天在班群里老師發了python面試題 第一題就是簡述python單引號、雙引號、三引號的場景和區別,根據以往經驗以及從網上找到的資源,筆者自己整理了一下; 1 單引號和雙引號的用法是類似的,但是如果字串裡有相同的符號時要進行轉義(\) eg1: 1) print 'hello'2) print "he