日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Matlab矩阵填充--Matlab interp2

發(fā)布時(shí)間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab矩阵填充--Matlab interp2 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??? Matlab interp2 為Matlab的矩陣填充函數(shù),

填充關(guān)系:

x=1:11; y=1:13; x1=1:0.1:12; y1=1:0.1:14; [x2,y2]=meshgrid(x1,y1); t1=interp2(x,y,t,x2,y2,'cubic');意義:

進(jìn)行十倍差值,使用雙三次插值 方法。


用指定的算法method 計(jì)算二維插值:
’linear’:雙線性插值算法(缺省算法);
’nearest’:最臨近插值;
’spline’:三次樣條插值;
’cubic’:雙三次插值。book.iLoveMatlab.cn


相關(guān)知識(shí)

??? 參考鏈接:http://blog.sina.com.cn/s/blog_5cd733a50100o4d8.html

??? 在生產(chǎn)和科學(xué)實(shí)驗(yàn)中,自變量 與因變量 間的函數(shù)關(guān)系有時(shí)不能寫出解析表達(dá)式,而只能得到函數(shù)在若干點(diǎn)的函數(shù)值或?qū)?shù)值,或者表達(dá)式過(guò)于復(fù)雜而需要較大的計(jì)算量。當(dāng)要求知道其它點(diǎn)的函數(shù)值時(shí),需要估計(jì)函數(shù)值在該點(diǎn)的值。
??? 為了完成這樣的任務(wù),需要構(gòu)造一個(gè)比較簡(jiǎn)單的函數(shù),使函數(shù)在觀測(cè)點(diǎn)的值等于已知的值,或使函數(shù)在該點(diǎn)的導(dǎo)數(shù)值等于已知的值,尋找這樣的函數(shù)有很多方法。根據(jù)測(cè)量數(shù)據(jù)的類型有以下兩類處理觀測(cè)數(shù)據(jù)的方法。
(1)測(cè)量值是準(zhǔn)確的,沒(méi)有誤差,一般用插值。
(2)測(cè)量值與真實(shí)值有誤差,一般用曲線擬合。

在MATLAB中,無(wú)論是插值還是擬合,都有相應(yīng)的函數(shù)來(lái)處理。


一、插值

1、一維插值
已知離散點(diǎn)上的數(shù)據(jù)集 ,即已知在點(diǎn)集X= 上的函數(shù)值Y=,構(gòu)造一個(gè)解析函數(shù)(其圖形為一曲線)通過(guò)這些點(diǎn),并能夠求出這些點(diǎn)之間的值,這一過(guò)程稱為一維插值。
MATLAB命令:yi=interp1(X, Y, xi, method)
該命令用指定的算法找出一個(gè)一元函數(shù) ,然后以 給出處的值。xi可以是一個(gè)標(biāo)量,也可以是一個(gè)向量,是向量時(shí),必須單調(diào),method可以下列方法之一:
‘nearest’:最近鄰點(diǎn)插值,直接完成計(jì)算;
‘spline’:三次樣條函數(shù)插值;
‘linear’:線性插值(缺省方式),直接完成計(jì)算;
‘cubic’:三次函數(shù)插值;
對(duì)于[min{xi},max{xi}]外的值,MATLAB使用外推的方法計(jì)算數(shù)值。
例1:已知某產(chǎn)品從1900年到2010年每隔10年的產(chǎn)量為:75.995, 91.972, 105.711, 123.203,131.699, 150.697, 179.323, 203.212, 226.505, 249.633, 256.344,267.893,計(jì)算出1995年的產(chǎn)量,用三次樣條插值的方法,畫出每隔一年的插值曲線圖形,同時(shí)將原始的數(shù)據(jù)畫在同一圖上。
解:程序如下

year=1900:10:2010; product=[75.995, 91.972, 105.711, 123.203, 131.699, 150.697,179.323, 203.212, 226.505, 249.633, 256.344, 267.893] p1995=interp1(year,product,1995) x=1900:2010; y=interp1(year,product,x,'cubic'); plot(year,product,'o',x,y);計(jì)算結(jié)果為:

p1995=252.9885。

2、二維插值

??? 已知離散點(diǎn)上的數(shù)據(jù)集 ,即已知在點(diǎn)集 上的函數(shù)值,構(gòu)造一個(gè)解析函數(shù)(其圖形為一曲面)通過(guò)這些點(diǎn),并能夠求出這些已知點(diǎn)以外的點(diǎn)的函數(shù)值,這一過(guò)程稱為二維插值。
??? MATLAB函數(shù): Zi=interp2(X,Y,Z,Xi,Yi,method)
??? 該命令用指定的算法找出一個(gè)二元函數(shù) ,然后以 給出 處的值。返回?cái)?shù)據(jù)矩陣 ,Xi,Yi是向量,且必須單調(diào),和meshgrid(Xi,Yi)是同類型的。

??? method可以下列方法之一:
‘nearest’:最近鄰點(diǎn)插值,直接完成計(jì)算;
‘spline’:三次樣條函數(shù)插值;
‘linear’:線性插值(缺省方式),直接完成計(jì)算;
‘cubic’:三次函數(shù)插值;

例2:已知1950年到1990年間每隔10年,服務(wù)年限從10年到30年每隔10年的勞動(dòng)報(bào)酬表如下:
表:某企業(yè)工作人員的月平均工資(元)
年份 1950 1960 1970 1980 1990
服務(wù)年限
10 150.697 179.323 203.212 226.505 249.633
20 169.592 195.072 239.092 273.706 370.281
30 187.652 250.287 322.767 426.730 598.243

試計(jì)算1975年時(shí),15年工齡的工作人員平均工資。

解:程序如下:

years=1950:10:1990; service=10:10:30; wage=[150.697 169.592 187.652 179.323 195.072 250.287 203.212 239.092 322.767 226.505 273.706 426.730 249.633 370.281 598.243]; mesh(service,years,wage) %繪原始數(shù)據(jù)圖 w=interp2(service,years,wage,15,1975); %求點(diǎn)(15,1975)處的值
計(jì)算結(jié)果為:235.6288


例3:設(shè)有數(shù)據(jù)x=1,2,3,4,5,6,y=1,2,3,4,在由x,y構(gòu)成的網(wǎng)格上,數(shù)據(jù)為:
12,10,11,11,13,15
16,22,28,35,27,20
18,21,26,32,28,25
20,25,30,33,32,20
求通過(guò)這些點(diǎn)的插值曲面。
:程序?yàn)?#xff1a;

x=1:6; y=1:4; t=[12,10,11,11,13,15 16,22,28,35,27,20 18,21,26,32,28,25; 20,25,30,33,32,20] subplot(1,2,1) mesh(x,y,t) x1=1:0.1:6; y1=1:0.1:4; [x2,y2]=meshgrid(x1,y1); t1=interp2(x,y,t,x2,y2,'cubic'); subplot(1,2,2) mesh(x1,y1,t1);
結(jié)果如下圖。


作業(yè):已知某處山區(qū)地形選點(diǎn)測(cè)量坐標(biāo)數(shù)據(jù)為:
x=0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
y=0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6
海拔高度數(shù)據(jù)為:
z=89 90 87 85 92 91 96 93 90 87 82
92 96 98 99 95 91 89 86 84 82 84
96 98 95 92 90 88 85 84 83 81 85
80 81 82 89 95 96 93 92 89 86 86
82 85 87 98 99 96 97 88 85 82 83
82 85 89 94 95 93 92 91 86 84 88
88 92 93 94 95 89 87 86 83 81 92
92 96 97 98 96 93 95 84 82 81 84
85 85 81 82 80 80 81 85 90 93 95
84 86 81 98 99 98 97 96 95 84 87
80 81 85 82 83 84 87 90 95 86 88
80 82 81 84 85 86 83 82 81 80 82
87 88 89 98 99 97 96 98 94 92 87

1、 畫出原始數(shù)據(jù)圖;
2、 畫出加密后的地貌圖,并在圖中標(biāo)出原始數(shù)據(jù)

x=1:11; y=1:13; t=[ 89, 90, 87, 85, 92, 91, 96, 93 ,90 ,87, 82, 92 ,96 ,98 ,99 ,95 ,91, 89, 86 ,84, 82 ,84, 96 ,98 ,95 ,92 ,90, 88 ,85 ,84, 83, 81, 85, 80 ,81, 82, 89, 95 ,96 ,93 ,92, 89, 86, 86, 82 ,85, 87, 98, 99, 96, 97 ,88 ,85 ,82, 83, 82 ,85 ,89 ,94, 95, 93, 92, 91, 86 ,84, 88, 88 ,92, 93, 94, 95, 89 ,87 ,86, 83, 81, 92, 92 ,96 ,97 ,98, 96, 93, 95, 84, 82, 81, 84, 85 ,85, 81, 82, 80 ,80, 81, 85, 90, 93, 95, 84 ,86 ,81 ,98 ,99 ,98, 97, 96, 95, 84, 87, 80, 81, 85 ,82, 83 ,84 ,87 ,90, 95 ,86, 88, 80, 82, 81 ,84, 85 ,86, 83, 82, 81, 80, 82, 87 ,88 ,89 ,98 ,99, 97 ,96, 98, 94, 92, 87] subplot(1,2,1) mesh(x,y,t) x1=1:0.1:12; y1=1:0.1:14; [x2,y2]=meshgrid(x1,y1); t1=interp2(x,y,t,x2,y2,'cubic'); subplot(1,2,2) mesh(x1,y1,t1);
結(jié)果如下圖:



二、使用opencv取代


使用opencv改寫,函數(shù)為:

//使用OpenCV方法進(jìn)行插值 //使用opencv resize函數(shù) //Matlab函數(shù)!//function zi = interp2(varargin)//varargin[0]: Src AxisX //varargin[1]: Src AxisY //varargin[2]: SrcData //varargin[3]: Dst AxisX //varargin[4]: Dst AxisY //method: interpolation method Eigen::MatrixXf CIcSearchM::interp2Cv(std::vector<Eigen::MatrixXf> &varargin,int method) {assert(varargin.size() >= 5);Eigen::MatrixXf zi;if (0 ==varargin[0].size() || 0 ==varargin[1].size()|| 0 ==varargin[3].size() || 0 ==varargin[4].size()){zi.resize(0,0);return zi;} else{zi.resize(varargin[3].size() , varargin[4].size());if (varargin[2].rows()!= zi.rows() || varargin[2].cols()!=zi.cols() ){zi.resize(0,0);return zi;} else{//Eigen::MatrixXf Mat; cv::Mat Img;cv::Mat ImgRe(zi.rows(),zi.cols(),CV_32F);m_Slamer.copyCvMat( varargin[3], Img);cv::resize( Img, ImgRe,ImgRe.size(),0,0,method );m_Slamer.copyCvMat( ImgRe, zi);}}return zi; }
使用方法:

std::vector<Eigen::MatrixXf> varargin;varargin.push_back(u_fea);varargin.push_back(v_fea);varargin.push_back(patch_p_f); varargin.push_back(u_pred_imak_dist);;varargin.push_back(v_pred_imak_dist );;patch_pred = this->interp2Cv( varargin,CV_INTER_CUBIC);

void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );src輸入圖像.dst輸出圖像.interpolation插值方法:

  • CV_INTER_NN - 最近鄰插值,
  • CV_INTER_LINEAR - 雙線性插值 (缺省使用)
  • CV_INTER_AREA - 使用象素關(guān)系重采樣。當(dāng)圖像縮小時(shí)候,該方法可以避免波紋出現(xiàn)。當(dāng)圖像放大,類似于 CV_INTER_NN 方法..
  • CV_INTER_CUBIC - 立方插值.

函數(shù) cvResize 將圖像 src 改變尺寸得到與 dst 同樣大小。若設(shè)定 ROI,函數(shù)將按常規(guī)支持 ROI.


總結(jié)

以上是生活随笔為你收集整理的Matlab矩阵填充--Matlab interp2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。