三次B樣條曲線擬合算法


1 三次B樣條曲線方程

B樣條曲線分為近似擬合和插值擬合,所謂近似擬合就是不過特征點,而插值擬合就是通過特征點,但是插值擬合需要經過反算得到控制點再擬合出過特征點的B樣條曲線方程。這里會一次介紹兩種擬合算法。首先介紹B樣條的曲線方程。

B樣條曲線的總方程為:

其中P是控制曲線的特征點,Fi,k(u)則是K階B樣條基函數。

1.1 三次B樣條曲線方程中基函數為:


其中 表示階乘。化成看的明白的式子就是(以四個控制點為例):

將圖片上的基函數代入到方程(1)中,就是:


方程(3)就是三次B樣條曲線方程。上式(2)的j是什么意思,其實j就是控制點的索引值。這里我把書上的公式摘抄下來,可能看起來更為清晰。參考書籍:《計算機圖形學 第3版》何援軍 第13章

三次B樣條曲線計算

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

近似擬合很簡單。不需要求控制點,求得, 由上述方程(3),代入就可以得到由這四個點近似擬合的一段三次B樣條曲線,起始點在P 0,終點在P 1,對於閉合輪廓,最后一段可以取前兩點做輔助,擬合實驗結果我最后一塊給出。這種近似擬合曲線光滑,但是最大不足就是不過特征點,也就是不過P i ​ ,需要過點需要反求控制點再擬合。

3 三次B樣條插值擬合

插值擬合較為復雜。其實也不算是很復雜,找資料過程和理解過程是一個復雜的過程。不過有了前面大神做工作,我們只是借用別人的成果寫代碼就好了。我給大家看一篇論文,大家可以百度或者去知網搜索,閉合 B 樣條曲線控制點的快速求解算法及應用。文章講解了反求控制點的具體步驟,寫的非常詳細,基本上貼近代碼的那種。大家可以根據這篇論文反求控制點,擬合出來的三次B樣條曲線是經過P i 。代碼就不放了,很多,可以根據我給的那篇論文直接編寫相應代碼,有問題可以私信我,知無不言。

4 擬合結果

 

原輪廓

近似擬合輪廓。可以看到沒過黑色特征點,只是近似擬合

 

 插值擬。可以看到曲線經過黑色特征點,不過有一些不足之處。

 5 總結

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

 

原文鏈接:https://blog.csdn.net/liumangmao1314/article/details/54588155


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM