2015-02-06 2 views
0

복잡한 잎 모양 패턴을 데이터에 맞추기 위해 모델을 사용하고 있습니다. 데이터는 일반 기능에서 복잡한 모양으로 무엇이든을 볼 수있는 (절반) 잎 스캔에서 등고선 좌표이며, 동일한 X에 대해 여러 개의 Y 좌표를가집니다 (예 : 단풍잎의 한면을 생각).R : 모델에 윤곽/복합 모양 맞추기 (다중 Y, 단일 X)

그러나 모델은 기능을 제공하지 않고 특정 규칙 집합에 따라 생성 된 좌표 시퀀스를 제공합니다. 이 좌표는 데이터의 쌍을 이루는 근사값이 아닙니다 (즉, 모델에서 계산 한 점은 데이터와 동일한 간격을 갖지 않습니다. 아래 이미지 참조) 운동의 포인트는 최소화 할 함수를 찾는 경우입니다 내 모델의 매개 변수가 모양을 최대한 정확하게 묘사하도록 최적화 될 수 있도록 간단한 모양에 대한 잔차 합계.

예 1 : 간단한 형태는 하나의 Y는 단일 X. 대한 이미지 아래 도시 : simple shape

블랙 도트 데이터 포인트 인 붉은 색 모델은 최적의 적합 포인트를 생성하는 동안. 보시다시피 두 데이터 세트에는 동일한 간격이 없으므로 보간 방법을 사용하여 제어점 세트에서 모델의 RSS를 계산했습니다 (예 : 축을 따라 여러 점에 대해 두 데이터 세트를 보간). 이것은 최적의 적합성을 제공하므로 아무런 문제가 없습니다.

예제 2 : 복잡한 모양, 다중 y, 단일 x. 모델에 의해 생성 된 모양의 가능성은 다음과 같습니다. complex shape

이 모델 생성을 대략적으로 묘사하는 데이터 세트가 있다고 가정합니다. 모델이 내 윤곽에 얼마나 잘 맞는지 판단하는 방법은 무엇입니까?

+0

특정 프로그래밍 문제로 질문을 좁혀보십시오. 문제는 매우 광범위하고 구체적이지 않습니다. –

+0

요청에 따라 몇 가지 예를 추가했습니다. –

답변

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)의 평가 기준을 기반으로합니다.

관련 문제