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

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

生活随笔

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

编程问答

三次B样条曲线拟合算法

發(fā)布時(shí)間:2023/12/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三次B样条曲线拟合算法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 三次B樣條曲線方程

B樣條曲線分為近似擬合和插值擬合,所謂近似擬合就是不過(guò)特征點(diǎn),而插值擬合就是通過(guò)特征點(diǎn),但是插值擬合需要經(jīng)過(guò)反算得到控制點(diǎn)再擬合出過(guò)特征點(diǎn)的B樣條曲線方程。這里會(huì)一次介紹兩種擬合算法。首先介紹B樣條的曲線方程。
B樣條曲線的總方程為:P(t)=∑i=0nPiFi,k(t)P(t)=\sum_{i=0}^{n} P_{i}F_{i,k}(t)P(t)=i=0n?Pi?Fi,k?(t) (1)
其中PiP_iPi?是控制曲線的特征點(diǎn),Fi,k(u)F_{i,k}(u)Fi,k?(u)則是K階B樣條基函數(shù)。
1.1 三次B樣條曲線方程中基函數(shù)為:
Fi,k(t)=1k!∑m=0k?i(?1)m(mk+1)(t+k?m?j)kF_{i,k}(t)=\frac{1}{k!}\sum_{m=0}^{k-i}(-1)^{m}\binom{m}{k+1}(t+k-m-j)^kFi,k?(t)=k!1?m=0k?i?(?1)m(k+1m?)(t+k?m?j)k (2)
其中(mk+1)\binom{m}{k+1}(k+1m?)表示階乘,化成看的明白的式子就是:


將圖片上的基函數(shù)代入到方程(1)中,就是:
P(t)=P0?F0,3(t)+P1?F1,3(t)+P2?F2,3(t)+P3?F3,3(t)P(t)= P_0*F_{0,3}(t)+P_1*F_{1,3}(t)+P_2*F_{2,3}(t)+P_3*F_{3,3}(t)P(t)=P0??F0,3?(t)+P1??F1,3?(t)+P2??F2,3?(t)+P3??F3,3?(t) (3)
方程(3)就是三次B樣條曲線方程。


2019-04-18 更新

有小伙伴提到上式(2)的j是什么意思,其實(shí)j就是控制點(diǎn)的索引值。這里我把書(shū)上的公式摘抄下來(lái),可能看起來(lái)更為清晰。
參考書(shū)籍:《計(jì)算機(jī)圖形學(xué) 第3版》何援軍 第13章
三次B樣條曲線計(jì)算
F0,3(t)=13!∑j=03(?1)jC4j)(t+3?0?j)3F_{0,3}(t)=\frac{1}{3!}\sum_{j=0}^{3}(-1)^{j}C^{j}_{4})(t+3-0-j)^3F0,3?(t)=3!1?j=03?(?1)jC4j?)(t+3?0?j)3

=16[(?1)0C40(t+3)3+(?1)1C41(t+2)3+(?1)2C42(t+1)3+(?1)3C43t3]=\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+3)^{3}+(-1)^{1}C^{1}_{4}(t+2)^{3}+(-1)^{2} C^{2}_{4}(t+1)^{3}+(-1)^{3}C^{3}_{4}t^{3}]=61?[(?1)0C40?(t+3)3+(?1)1C41?(t+2)3+(?1)2C42?(t+1)3+(?1)3C43?t3]

=16(?t3+3t2?3t+1)=16(1?t)3=\frac{1}{6}(-t^{3}+3t^{2}-3t+1)=\frac{1}{6}(1-t)^{3}=61?(?t3+3t2?3t+1)=61?(1?t)3

F1,3(t)=13!∑j=02(?1)jC4j)(t+3?1?j)3F_{1,3}(t)=\frac{1}{3!}\sum_{j=0}^{2}(-1)^{j}C^{j}_{4})(t+3-1-j)^3F1,3?(t)=3!1?j=02?(?1)jC4j?)(t+3?1?j)3

=16[(?1)0C40(t+2)3+(?1)1C41(t+1)3+(?1)2C42t3]=\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+2)^{3}+(-1)^{1}C^{1}_{4}(t+1)^{3}+(-1)^{2} C^{2}_{4}t^{3}]=61?[(?1)0C40?(t+2)3+(?1)1C41?(t+1)3+(?1)2C42?t3]

=16(3t3?6t2+4)=\frac{1}{6}(3t^{3}-6t^{2}+4)=61?(3t3?6t2+4)

F2,3(t)=13!∑j=01(?1)jC4j)(t+3?2?j)3F_{2,3}(t)=\frac{1}{3!}\sum_{j=0}^{1}(-1)^{j}C^{j}_{4})(t+3-2-j)^3F2,3?(t)=3!1?j=01?(?1)jC4j?)(t+3?2?j)3

=16[(?1)0C40(t+1)3+(?1)1C41t3=\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+1)^{3}+(-1)^{1}C^{1}_{4}t^{3}=61?[(?1)0C40?(t+1)3+(?1)1C41?t3

=16(?3t3+3t2+3t+1)=\frac{1}{6}(-3t^{3}+3t^{2}+3t+1)=61?(?3t3+3t2+3t+1)

F3,3(t)=13!∑j=00(?1)jC4j)(t+3?3?j)3F_{3,3}(t)=\frac{1}{3!}\sum_{j=0}^{0}(-1)^{j}C^{j}_{4})(t+3-3-j)^3F3,3?(t)=3!1?j=00?(?1)jC4j?)(t+3?3?j)3

=16[(?1)0C40t3=\frac{1}{6}[(-1)^{0}C^{0}_{4}t^{3}=61?[(?1)0C40?t3

=16t3=\frac{1}{6}t^{3}=61?t3


2 三次B樣條曲線近似擬合

近似擬合很簡(jiǎn)單。不需要求控制點(diǎn),求得Fi,k(t)F_{i,k}(t)Fi,k?(t),由上述方程(3),代入P0,P1,P2,P3P_0,P_1,P_2,P_3P0?,P1?,P2?,P3?就可以得到由這四個(gè)點(diǎn)近似擬合的一段三次B樣條曲線,起始點(diǎn)在P0P_0P0?,終點(diǎn)在P1P_1P1?,對(duì)于閉合輪廓,最后一段可以取前兩點(diǎn)做輔助,擬合實(shí)驗(yàn)結(jié)果我最后一塊給出。這種近似擬合曲線光滑,但是最大不足就是不過(guò)特征點(diǎn),也就是不過(guò)PiP_iPi?,需要過(guò)點(diǎn)需要反求控制點(diǎn)再擬合。

3 三次B樣條插值擬合

插值擬合較為復(fù)雜。其實(shí)也不算是很復(fù)雜,找資料過(guò)程和理解過(guò)程是一個(gè)復(fù)雜的過(guò)程。不過(guò)有了前面大神做工作,我們只是借用別人的成果寫(xiě)代碼就好了。我給大家看一篇論文,大家可以百度或者去知網(wǎng)搜索,閉合 B 樣條曲線控制點(diǎn)的快速求解算法及應(yīng)用。文章講解了反求控制點(diǎn)的具體步驟,寫(xiě)的非常詳細(xì),基本上貼近代碼的那種。大家可以根據(jù)這篇論文反求控制點(diǎn),擬合出來(lái)的三次B樣條曲線是經(jīng)過(guò)PiP_iPi?的。代碼就不放了,很多,可以根據(jù)我給的那篇論文直接編寫(xiě)相應(yīng)代碼,有問(wèn)題可以私信我,知無(wú)不言。
##4 擬合結(jié)果
原輪廓
近似擬合輪廓。可以看到?jīng)]過(guò)黑色特征點(diǎn),只是近似擬合
插值擬。可以看到曲線經(jīng)過(guò)黑色特征點(diǎn),不過(guò)有一些不足之處。

##5 總結(jié)
三次B樣條曲線擬合輪廓效果還是可以,較之Beizer(可以參考我博客三次Beizer曲線擬合算法),B樣條將一些細(xì)節(jié)描述的很好,很多細(xì)節(jié)之處都貼近原輪廓,但是有一些不足之處,可以看到對(duì)直線擬合效果不是很好。兩篇博客都是關(guān)于閉合輪廓的擬合,對(duì)于非閉合或者只是一段曲線擬合,還有一種曲線是很好的,《數(shù)值分析》提到過(guò),叫三次樣條插值擬合,擬合效果很好,我做過(guò)擬合一元三次方程曲線,擬合效果跟原曲線非常貼近,不過(guò)過(guò)程中需要用到追趕法,而追趕法需要滿(mǎn)足一個(gè)條件,對(duì)于閉合曲線三次樣條插值是不滿(mǎn)足這個(gè)條件的,所以我沒(méi)去深研究,大家可以去試一試。謝謝大家!

-------------------------------------------------2018-10-30--------------------------------------------
真的很感謝大家的支持,這一年都比較忙,找實(shí)習(xí)and找工作,而且這個(gè)東西是研一上學(xué)期搞的,現(xiàn)在看都毫無(wú)印象,對(duì)自己說(shuō)一句:牛逼。我把代碼放在網(wǎng)盤(pán)了(能運(yùn)行,但現(xiàn)在沒(méi)效果,大家可以檢查下,之前是OK的),本來(lái)想上傳到CSDN,好像要C幣,而且要審核,太墨跡了。
鏈接: https://pan.baidu.com/s/1mSQMmvL71gwEAqgiT6O9Gg 提取碼: xv5f

總結(jié)

以上是生活随笔為你收集整理的三次B样条曲线拟合算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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