2015-02-06 22 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)