IDL에서 불규칙 분포 데이터를 규칙 격자화된 데이터로 만들기 위하여 GRIDDATA 함수를 사용하는 방법 및 관련 예제를 지난 회에 이어서 계속 소개하도록 하겠습니다. 지난 회차에서는 GRIDDATA 함수에서 세부적으로 IDW(Inverse Distance Weighting) 기법을 사용하는 방법을 다루었는데, 오늘은 그 이외의 기법들을 적용해보고자 합니다.
그러면 지난 회와 마찬가지로 먼저 원본 데이터를 SCATTERPLOT 함수로 표출해놓고 시작하겠습니다. 가상의 원본 데이터를 생성하는 과정은 지난회 게시물의 초반부에 나와있으므로 여기서는 생략하고 바로 본론으로 들어가겠습니다. 다음과 같이 가로로 긴 그래픽창을 띄우고 원본 데이터부터 맨 좌측에 표출해둡니다.
win2 = WINDOW(DIMENSIONS=[300*4, 300], /NO_TOOLBAR, $
WINDOW_TITLE='Different Methods of Gridding')
ct = COLORTABLE(67, /REVERSE)
scp2 = SCATTERPLOT(x, y, SYMBOL='square', /SYM_FILLED, $
SYM_SIZE=1.2, XRANGE=[0, 1], YRANGE=[0, 1], $
RGB_TABLE=ct, MAGNITUDE=f>0<5, $
XTICKLEN=0.001, YTICKLEN=0.001, $
MARGIN=0, /CURRENT, LAYOUT=[4, 1, 1])
이제 규칙 격자화 처리를 거친 결과 데이터를 생성해서 원본 데이터 그림의 오른쪽 부분에 차례로 채워넣고자 합니다. 오늘은 먼저 RBF(Radian Basis Function)라는 기법을 사용해보겠습니다. 이 기법은 1차원으로 비유한다면 Spline 내삽과 유사한 기법이라고 볼 수 있습니다. 즉 모든 데이터 포인트값을 지나가면서도 부드러운 2차원 면(Surface)을 찾아내는 내삽 기법이라고 보면 됩니다. 이 기법에 관한 좀 더 자세한 내용은 여기서는 더 다루기가 힘들 것 같아서 저도 검색을 좀 해봤더니 이 링크의 내용이 도움이 되는 것 같습니다. 이 기법을 사용하여 처리된 결과는 다음과 같은 방식으로 얻을 수 있습니다.
gridded_a = GRIDDATA(x, y, f, START=0, DELTA=0.02, DIMENSION=51, $
/RADIAL_BASIS_FUNCTION, FUNCTION_TYPE=1)
HELP, gridded_a
PRINT, MIN(gridded_a), MAX(gridded_a)
이와 같이 /RADIAL_BASIS_FUNCTION 키워드를 사용하면 됩니다. 물론 이 RBF 기법을 사용하는데 있어서 좀 더 세부적인 설정을 지원하는 키워드들도 더 많이 있는데요. IDL 도움말에서 GRIDDATA 함수에 관한 내용을 보면 RBF 기법과 연관된 키워드들이 다음과 같이 소개되어 있습니다.
위의 예제 코드에서는 이 키워드들 중 여기서는 FUNCTION_TYPE이라는 것을 사용하고 있습니다. 이는 내삽에 실제로 사용되는 함수의 형태를 지정하는 역할을 합니다. 이 키워드에는 0~4 중 하나의 값을 줄 수 있습니다. 디폴트는 0인데 이 경우 Inverse Multiquadratic 함수가 사용되고, 1인 경우에는 Multilog 함수가 사용됩니다. 나머지 숫자들이 어떤 수식에 해당되는가에 대해서는 IDL 도움말에서 확인이 가능합니다. 여기서는 1로 설정해서 결과를 얻었는데, 그 모습을 원본 데이터 그림 바로 오늘쪽 옆에 붙여서 표출하면 다음 그림과 같습니다.
im2a = IMAGE(gridded_a, RGB_TABLE=ct, MIN_VALUE=0, MAX_VALUE=5, $
MARGIN=0, /CURRENT, LAYOUT=[4, 1, 2])
지난번에 시도했던 Inverse Distance 기법에 의한 결과와 비교해보면 RBF 기법의 결과가 전반적으로 좀 더 부드럽고 자연스러운 느낌인 것 같기도 합니다. 어차피 각 기법마다 특성이 다르고, 원본 데이터의 상태에 따라 적합한 기법은 다를 수 있습니다. RBF 기법을 적용하는데 있어서는 FUNCTION_TYPE 이외에도 더 많은 세부 설정들이 가능하지만 일단 이 정도로만 언급해두겠습니다. 여러분이 직접 관련 키워드의 값들을 조정하면서 다양하게 결과를 테스트해보시는 것이 가장 좋을 것 같습니다.
이번에는 Kriging이라는 기법을 사용해보겠습니다. 이 기법에 관해서도 여기서 자세한 설명을 하기는 힘들 것 같아서 이해에 도움이 될만한 링크만 안내해두겠습니다. 어쨌든 이 기법을 적용한 결과는 다음과 같은 방식으로 얻을 수 있습니다.
gridded_b = GRIDDATA(x, y, f, START=0, DELTA=0.02, DIMENSION=51, $
/KRIGING)
HELP, gridded_b
PRINT, MIN(gridded_b), MAX(gridded_b)
이와 같이 /KRIGING 키워드를 사용하면 됩니다. 물론 이 기법을 사용하는데 있어서도 좀 더 세부적인 설정을 지원하는 키워드들이 많이 있습니다. IDL 도움말에서 GRIDDATA 함수에 관한 내용을 보면 Kriging 기법과 연관된 키워드들이 다음과 같이 소개되어 있습니다.
그러나 여기서는 디폴트 설정만 사용해서 진행해보았습니다. 이렇게 산출된 결과를 다음과 같은 방식으로 추가적으로 표출해보면 다음 그림과 같습니다.
im2b = IMAGE(gridded_b, RGB_TABLE=ct, MIN_VALUE=0, MAX_VALUE=5, $
MARGIN=0, /CURRENT, LAYOUT=[4, 1, 3])
얼핏 봐서는 앞서 얻었던 RBF 기법에 의한 결과와 크게 차이가 나지는 않는 것 같지만, 그래도 세부적으로는 약간의 차이는 보입니다. 이외에도 Kriging 기법의 적용에 있어서는 지원되는 키워드들을 통하여 많은 세부 설정들이 가능하겠지만, 여기서는 일단 이 정도로만 언급해두겠습니다.
이번에는 Modified Shepards라는 기법을 사용해보겠습니다. 이 기법의 기본 원리는 이전 게시물에서 소개했던 IDW 기법과 유사합니다. 다만 IDW 기법에서는 존재하는 모든 데이터 포인트들을 다 고려하는 반면, Modified Shepards 기법에서는 특정 반경 이내의 데이터 포인트들만 고려한다는 차이점이 있습니다. 이 기법을 적용한 결과는 다음과 같은 방식으로 얻을 수 있습니다.
TRIANGULATE, x, y, tr
HELP, tr
gridded_c = GRIDDATA(x, y, f, START=0, DELTA=0.02, DIMENSION=51, $
TRIANGLES=tr, /SHEPARDS)
HELP, gridded_c
PRINT, MIN(gridded_c), MAX(gridded_c)
이와 같이 GRIDDATA 함수에서 /SHEPARDS 키워드를 사용하면 됩니다. 다만 이 기법을 사용하는데 있어서 필수적인 사전 절차가 있는데요. 바로 TRIANGULATE 프로시저를 사용하여 모든 데이터 포인트들에 대하여 가까운 것들끼리 연결한 모든 삼각형 폴리곤들의 연결성(Connectivity) 정보를 산출하는 과정이 선행되어야 합니다. 여기서는 이러한 과정을 통하여 산출된 연결성 정보를 담은 tr이라는 배열을 GRIDDATA 함수의 TRIANGLES 키워드에 이 tr을 부여하였습니다. 실제로 GRIDDATA 함수에서 지원되는 세부 기법들 중 이와 같이 TRIANGLES 키워드에 연결성 정보를 부여하는 과정을 반드시 필요로 하는 기법들이 총 5개 있는데 이들은 다음과 같습니다.
Natural Neighbor
Nearest Neighbor
Modified Shepard’s
Linear
Quintic Interpolation
어쨌든 이와 같은 과정을 통하여 산출된 결과를 다음과 같은 방식으로 추가적으로 표출해보면 다음 그림과 같습니다.
im2c = IMAGE(gridded_c, RGB_TABLE=ct, MIN_VALUE=0, MAX_VALUE=5, $
MARGIN=0, /CURRENT, LAYOUT=[4, 1, 4])
이 그림을 보면 전반적으로 그럴듯해 보이긴 하는데, 약간 이상한 부분(가운데 하단부)도 보입니다. 이것은 원본 데이터의 특성에 따른 원인일 수도 있고, Modified Shepards 기법을 사용하는데 있어서 추가적으로 설정 가능한 키워드들에 대한 사용이 더 필요하기 때문일 수도 있습니다. 그래서 앞서 GRIDDATA 함수가 사용된 부분을 약간 수정하여 다음과 같이 키워드를 하나 추가해보았습니다.
gridded_c = GRIDDATA(x, y, f, START=0, DELTA=0.02, DIMENSION=51, $
TRIANGLES=tr, /SHEPARDS, SEARCH_ELLIPSE=1)
여기서는 SEARCH_ELLIPSE 키워드가 사용되었는데, 내삽과정에서 각 격자점마다 주변 반경 얼마까지만 고려할지를 정량적으로 설정하는 역할을 합니다. 이 값을 적절히 조정하면서 테스트를 해보면 다음 그림과 같이 좀 더 부드러운 결과를 얻을 수도 있습니다.
물론 이 Modified Shephards 기법을 사용하는데 있어서도 좀 더 세부적인 설정을 지원하는 키워드들이 많이 있습니다. 도움말에서 GRIDDATA 함수에 관한 내용을 보면 이 기법과 연관된 키워드들이 다음과 같이 소개되어 있습니다. 참고해두시면 좋을 것 같습니다.
오늘은 GRIDDATA 함수에서 RBF(Radial Basis Function), Kriging, Modified Shephards 등 세가지 기법들을 적용하는 방법 및 관련 예제들을 살펴보았습니다. 아마도 이어지는 게시물을 한번 정도 더 준비하게 될 것 같은데요. 이 내용도 조만간 올리도록 하겠습니다.
'IDL > Math' 카테고리의 다른 글
비선형(Non-linear) 함수의 근사(Fitting) (Part 1) (0) | 2018.08.09 |
---|---|
불규칙 분포 데이터를 규칙 격자화된 데이터로 만들기 [3] (0) | 2018.01.30 |
불규칙 분포 데이터를 규칙 격자화된 데이터로 만들기 [1] (0) | 2018.01.09 |
A_CORRELATE 함수를 이용한 자기상관(Autocorrelation) 기법의 활용 [2] (0) | 2017.11.29 |
A_CORRELATE 함수를 이용한 자기상관(Autocorrelation) 기법의 활용 [1] (0) | 2017.11.20 |