2015-02-06 97 views
0

我正在使用模型來將複雜葉形圖案擬合到數據。數據只是(半)葉掃描的輪廓座標,它可以查看從正常函數到複雜形狀的任何內容,對於相同X(例如,考慮楓葉的一側)具有多個Y座標。R:將輪廓/複雜形狀擬合到模型(多個Y,單個X)

但是,該模型不提供函數,而是根據一組特定的規則生成座標序列。這些座標不是數據的兩兩近似值(即從模型計算出的點與數據的間隔不相同,請參見下圖) 練習的要點是如果要找到最小化的函數(就像您使用簡單形狀的殘差平方和),以便我的模型的參數可以被優化以儘可能準確地描述形狀。

實施例1:一個簡單的形狀,對於單X.在圖像下面所示單個Y:simple shape

中的黑點是數據點,而紅色的是模型生成點的最佳擬合。正如你所看到的,這兩個數據集沒有相等的間隔,所以我使用一種插值方法來計算一組控制點上的模型的RSS(例如,爲軸上許多點插入兩個數據集)。這爲我提供了最佳配合,所以在這裏沒有問題。

示例2:複雜形狀,多個y,單個x。該模型生成的形狀的可能性如下:complex shape

假設我有一個描述形狀的數據集,則此模型生成近似。我怎樣才能確定模型適合我的輪廓?

+0

嘗試將問題縮小到特定的編程問題。正如問題所展示的那樣,這個問題非常廣泛而且非特定。 – 2015-02-06 10:01:35

+0

我根據您的要求添加了一些示例 – 2015-02-06 10:50:18

回答

0

如果有人遇到過類似的問題。我最終通過與區域重疊優化合作解決了這個問題。使用r軟件包sp和rgeos。

library(sp) 
library(rgeos) 
PolysData <- Polygons(list(Polygon(contourData), "Poly") 
SpPData <- SpatialPolygons(list(PolysData), 1:1) 
ParamOpt <- function(par){ 
    RSS <- tryCatch({ 
     contourGen <- GenerateShape(par) 
     PolyFit <- Polygon(contourGen) 
     PolysFit <- Polygons(list(PolyFit), "Poly") 
     SpPFit <- SpatialPolygons(list(PolysFit), 1:1) 
     RSS <- tryCatch({ 
     Inters <- gIntersection(SpPData,SpPFit) 
     TruePos <- [email protected][[1]]@area 
     FalsePos <- [email protected][[1]]@area-TruePos 
     FalseNeg <- [email protected][[1]]@area-TruePos 
     TrueNeg <- 1-TruePos-FalsePos-FalseNeg 
     Acc <- (TruePos+TrueNeg)/(TruePos+TrueNeg+FalsePos+FalseNeg) 
     return(1 - Acc) 
     }, error = function(err) { 
     RSS <- 10 
     return(RSS) 
     }) 
     return(RSS) 
    }, error = function(err) { 
     RSS <- 10 
     return(RSS) 
    }) 
    return(RSS) 
} 

GenerateShape函數是一個自寫函數,用於創建基於參數的問題中呈現的形狀。該標準基於「圖像處理技術和分割評估」的評估標準(Smochina,2011)