2012-07-15 98 views
1

我想將曲線擬合成圖像中的許多像素,以便我可以對其形狀進行進一步處理。有誰知道如何在C/++中實現最小二乘法,最好使用以下參數:一個x數組,一個y數組和一個答案數組(答案數組的長度應該指出需要計算多少個係數)?用於圖像曲線擬合的多項式最小二乘法

+0

一個確切的解決方案是:http://rosettacode.org/wiki/Polynomial_regression#C – user293895 2012-07-16 11:34:30

回答

1

如果這不是您自己實施這個練習的一些練習,我會建議您使用現成的庫,如GNU gsl。查看名稱以gsl_multifit_開頭的功能,請參閱第二個例子here

+0

感謝您的這一點,但我不確定如何使用gsl_multifit_,這些示例似乎是針對3維數據,我不知道協方差矩陣是如何工作的。 – user293895 2012-07-15 12:10:40

+0

您是否有可用於商業軟件的解決方案,而無需提供源代碼? – wil 2014-01-27 05:58:06

1

如果您想要像圖表中那樣擬合有序點(x,y),您可以使用線性最小二乘法,但始終使用此類方法時,您需要指定用於近似的多項式的階數(長度你的答案陣列大概是)。如果你的點是能夠形成一個閉環或某個結構輪廓的平面上的一般有序點(例如試圖擬合描述一個橢圓或一個圓或其他閉合或更復雜幾何的點),那麼你要去需要更復雜的東西。您仍然可以使用最小二乘方,但您需要使用樣條曲線等參數類型曲線。看看這個鏈接的PDF可能會給你所需要的(或者至少說明我在說什麼):http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CE0QFjAA&url=http%3A%2F%2Ffolk.uio.no%2Fin329%2Fnchap6.pdf&ei=Yp8CUNvHC8Kg0QX6r_mEBw&usg=AFQjCNHBUZ5t2Y7C8eONYSosRydLs4Zu4A

沒有看到你正在嘗試合適的圖像很難說 - 很可能您的數據可以用非線性最小二乘多項式的非參數方式擬合 - 如果是這樣,您只需要一個線性代數庫,並且可以像下面這樣自己編碼近似值:http://en.wikipedia.org/wiki/Ordinary_least_squares

即使如此,所有形式的近似都要求你在決定你的表格(函數基礎和度數等)之前,先確定它。例如,如果您想確定是否需要4,5,6或7次多項式來擬合您的數據,則需要適合每個數據並評估自己的適用性。沒有通用的方法(至少沒有我知道的)會告訴你需要適合數據的逼近程度。

+0

不幸的是,我需要在我的最小二乘法中使用多項式,而我剛剛發現可能數據實際上可能是3維的這一事實,因爲我需要根據數據呈現的順序提供最小二乘算法。雖然數學PDF是有幫助的,我不太擅長數學和C代碼之間的轉換。 – user293895 2012-07-15 15:08:46

+0

在3D中擬合曲線是一項艱鉅的任務。您可能需要使用正交距離迴歸和參數曲線,如果您從頭開始對其進行編碼,則這並不重要。你能提供你所擁有的數據的圖像嗎? – mathematician1975 2012-07-16 08:51:58

+0

嗯,我正在嘗試創建一個通用的形狀描述(稍後用於形狀識別),示例圖像可能是這樣的字母:http://tinypic.com/r/bcv45/6 – user293895 2012-07-16 10:22:07