GIS

QGIS: 다중 창을 이용한 '지오레퍼런싱(Georeferening)' 기능 소개

유병혁 2021. 8. 21. 16:20

안녕하세요? 이번 글은 QGIS에서 다중 창을 이용한 '지오레퍼런싱(Georeferencing)' 기능을 정리해 보겠습니다.

지오레퍼런싱은 QGIS의 '지리참조자(Georeferencer)' 기능을 이용하시면 됩니다. 해당 문서는 다음과 같습니다.

 

15.3. 지리참조자 — QGIS Documentation 문서

래스터 이미지에 사용자 GCP를 추가했다면, 지리참조 과정을 위해 변형(transformation) 설정을 정의해야 합니다. 사용자가 GCP를 얼마나 많이 잡았는지에 따라, 입력 데이터의 유형 및 품질에 따라,

docs.qgis.org

 

지오레퍼런싱(Georeferencing)은 래스터 데이터의 각 화소에 실세계 좌표를 할당하는 과정입니다. 지도를 스캔한 이미지나 과거 데이터는 일반적으로 좌표계가 정의되어 있지 않습니다. 이러한 경우 정확한 위치 데이터를 참조하여 스캔 이미지에 좌표계를 적용해야 할 텐데요, 이 과정을 정리해 보겠습니다.

 

일단, 정확한 위치 데이터를 레이어 추가합니다. 저는 XYZ Tiles에서 OpenStreetMap을 추가한 후, 우리나라 영역으로 확대해 보겠습니다.

지리참조자 기능을 실행합니다. 상단 메뉴에서 '래스터 > 지리참조자'를 클릭하시면 됩니다.

실행 창은 아래와 같습니다.

지리참조자 상단 메뉴에서 '설정 > 변환 설정'을 클릭해 봅니다.

변환 설정 창이 실행되었는데요,

변환 파라미터를 먼저 지정해 보겠습니다. 변환 유형 알고리즘은 다음과 같습니다(QGIS 사용자 지침서 내용 발췌/보완):

 

선형(Linear): 다른 알고리즘과 달리 래스터 픽셀을 실제로 변형(transform)하지는 않습니다. 이미지 배치(positioning) 작업과 균일한 스케일링(unform scaling) 작업을 할 수 있지만, 회전(rotation) 또는 다른 변형(transformatino)을 할 수는 없습니다. 사용자의 이미지가 훌륭한 품질의 래스터 맵이고 알려진 좌표계를 쓰고 있지만, 지리참조 정보만 누락돼 있는 경우 가장 적합한 알고리즘입니다. 적어도 2개 이상의 GCP가 필요합니다.

 

헬머트(Helmert): 회전(rotation)이 가능합니다. 사용자의 래스터가 훌륭한 품질의 지역 맵이거나 정사보정(orthorectified) 항공사진인 경우 특히 유용하지만, 사용자 CRS에서 그리드 방향(grid bearing)으로 정렬되지는 않습니다. 적어도 2개 이상의 GCP가 필요합니다.

 

다항식 1(Polynomial 1): 보다 일반적인 아핀 변환(affine transformation)을, 그 중에서도 특히 균일 자르기(uniform shear)도 할 수 있습니다. 직선은 직선으로 (예: 동일 선상의 포인트는 동일 선상에) 남고, 평행한 라인들은 평행하게 남습니다. 이 알고리즘은 서로 다른 방향에서 서로 다른 지상 픽셀 크기로 도표화(또는 데이터 수집)됐을 수도 있는 지리참조 데이터 통계지도(cartogram)에 특히 유용합니다. 적어도 3개 이상의 GCP가 필요합니다.

 

다항식 2-3(Polynomial 2-3): 아핀 변환만 사용하는 대신 더 일반적인 2차 또는 3차 다항식을 사용합니다. 즉 곡률 또는 다른 체계적인 이미지 왜곡을, 예를 들면 만곡 경계를 가진 항공사진 맵을 처리할 수 있습니다. 적어도 6개의(10개 권장) GCP가 필요합니다. 이미지 전체에 걸쳐 각도 및 지역 축척을 유지하거나 일괄 처리하지 않습니다. 특히 직선이 곡선이 될 수도 있고, 경계 부근 또는 GCP에서 멀리 떨어진 위치에서 다항식을 데이터에 맞게 추정하느라 상당한 왜곡이 일어날 수도 있습니다.

 

박판 스플라인(Thin Plate Spline: TPS): 지역적인 다항식 여러 개를 사용해서 지정한 GCP에 일치하도록 래스터를 '고무판 휘듯이(rubber sheets)' 전체 지표 곡률을 최소화한 채로 변형할 수 있습니다. GCP에서 멀리 떨어진 영역은 GCP와 일치하도록 움직여서 산출될 것이지만, 그렇지 않은 경우 지역적인 왜곡은 최소화될 것입니다. TPS는 망가지거나 왜곡된, 아니면 살짝 부정확한 맵 또는 서툴게 정사보정된 항공사진을 지리참조하는 데 가장 유용합니다. 또 알 수 없는 투영 유형 또는 파라미터를 가지고 있지만 정규 그리드 또는 조밀한 임시(ad-hoc) GCP 집합을 참조 맵 레이어와 매칭할 수 있는 맵을 대략적으로 지리참조해서 그대로 재투영하는 데에도 유용합니다. 이 알고리즘은 기술적으로 최소한 10개 이상의 GCP를 필요로 하지만, 성공적인 실행을 위해서는 보통 더 많이 필요합니다.

 

투영(Projective): Polynomial 1 알고리즘을 다른 방향으로 일반화해서, 서로 평행하지 않은 2개의 평면, 즉 이미지와 맵 캔버스 사이의 중심투영(central projection)을 표현하는 변형을 할 수 있습니다. 직선은 직선으로 남지만, 평행 상태는 보전되지 않으며 이미지 전체에 걸쳐 원근법에 따라 축척이 일관되게 변화합니다. 이 변형 유형은 훌륭한 품질의 맵을 (평면 스캔이 아니라) 비스듬하게 찍은 사진 또는 비스듬하게 찍은 항공사진을 지리참조하는 데 가장 유용합니다. 적어도 4개의 GCP가 필요합니다. 

지오레퍼런싱의 또다른 설명은 다음 링크를 참고하시기 바랍니다.

 

What is Georeferencing? How to Georeference Anything - GIS Geography

Learn how to georeference with precision in this georeferencing guide. Add control points in two images, select a transformation and check your RMSE.

gisgeography.com

지오레퍼런싱을 할 때, 실세계와 보다 잘 연관되도록 이미지를 늘리고(stretch), 크기를 조정(scale)하고, 회전(ratate)하고, 기울(skew)입니다. 일반적인 지오레퍼런싱은 아핀 변환이면 충분합니다. 아핀 변환은 이미지의 크기를 조정하고, 회전하고, 이동하고, 기울이며 2차원 공간에서 직선을 유지합니다.

Rubber Sheeting(러버 시팅) 변환은 3차 다항식 방정식을 통해 이미지를 구부리고 뒤틀어 더 많은 유연성을 제공합니다. 더 높은 다항식(polynomial)은 이미지의 더 많은 굽힘(bending) 및 뒤틀림(warping)을 허용합니다. 스캔한 이미지에 심각한 왜곡이 있는 경우 3차 다항식이 유용할 수 있지만 일반적으로 지리 참조에는 아핀 변환을 사용합니다.

 

리샘플링 방법은 다음과 같습니다: 최근접 이웃(Nearest neighbour), 선형(Linear), 3차(Cubic), 3차 스플라인(Cubic Spline), 란초스(Lánczos).

 

래스터의 통계를 변경하고 싶지 않다면(다항식 2-3, 박판 스플라인, 투영 알고리즘과 같이 기하학적 스케일링을 사용하는 경우 제외), '최근접 이웃'을 선택하는 편이 좋습니다. 반면에 '3차 리샘플링(cubic resampling)'을 선택하면, 시각적으로 좀 더 다듬어진 결과물을 산출할 것입니다.

변환 유형과 리샘플링 방법과 관련해 글을 정리해 봤습니다. 여기서는 변환 유형은 '선형', 리샘플링 방법은 '최근접 이웃'을 지정하여 실습을 진행해 보겠습니다. 대상 공간 참조 시스템은 OpenStreetMap과 Vworld에서 사용하는 'EPSG:3857'로 정의합니다. 

'완료 후 QGIS로 불러오기'를 체크하여, 지오레퍼런싱이 완료되면 산출 래스터가 바로 레이어 추가되도록 설정합니다.

'산출 래스터'를 지정하여 변환 설정을 마쳐 보겠습니다. 

다음으로는 '설정> 지리참조자 구성'을 클릭합니다.

아래와 같이 '지리참조자 설정' 창이 실행되는데요,

포인트 팁에서 'ID 표시', '좌표 보기'를 체크해 줍니다. 우리가 앞으로 해줄 작업은 스캔 이미지와 맵에서 동일한 위치의 객체, 특징 점을 지정해주는 것입니다. 이것을 GCP(Ground Control Point, 지상기준점)이라고 합니다. 포인트 팁은 GCP를 설정했을 때 해당 GCP의 ID, 좌표값이 화면상에 보이는 효과를 줍니다.

다음으로는 '도크된 지리참조자 창 보이기'를 체크합니다.

Qt 5.6이 적용되는 QGIS 3.0부터 Dock Widget을 통한 사용자 인터페이스가 향상되었습니다. 이에 따라 지리참조자 창을 도킹할 수 있는데요, 스캔 이미지와 맵을 함께 볼 수 있기 때문에 지오레퍼런싱 작업의 편의성을 높여줍니다.  

저는 아래와 같이 좌측 창은 OpenStreetMap을, 우측 창은 지리참조자를 배치시켜 보겠습니다.

지리참조자 창에서 '래스터 열기'를 클릭하고 스캔 이미지를 올려봅니다.

아래와 같이 스캔 이미지가 추가되었습니다.

우측 이미지 정보를 참고하여 좌측 OpenStreetMap에서 동일한 영역으로 이동해 봅니다.

아래와 같이 좌측과 우측에 동일한 위치를 확인하였습니다.

자, 이제 '포인트 추가하기'를 클릭합니다.

스캔 이미지에서 지점을 클릭하면 '지도 좌표 입력' 창이 실행됩니다. 여기서 좌표를 직접 입력(스캔 이미지에 좌표 정보가 있는 경우)하거나, '맵 캔버스에서' 버튼을 클릭하고 맵(여기서는 OpenStreetMap)에서 동일한 지점을 클릭해 줍니다. 

맵에서 클릭한 지점의 좌표가 자동으로 입력됩니다. 이제 '확인' 버튼을 클릭하면,

첫번째 GCP 포인트가 생성됩니다! 선형 알고리즘은 최소 2개 이상의 GCP가 필요하므로, 포인트를 추가해 보겠습니다!

아래 지점을 하나 더 추가합니다! 이번에는 VworldBase를 참조하였습니다. 

자, 한번 변환해볼까요?! '지오레퍼런싱 시작'을 클릭해봅니다.

아래와 같이 지오레퍼런싱 적용 결과 파일이 생성되었습니다.

스캔 이미지가 지리 참조된 것을 확인하실 수 있습니다.

지리 참조 결과 레이어를 끄고, GCP를 하나 더 추가해 보겠습니다!

지오레퍼런싱의 정확도는 Residual(잔차)로 확인합니다. 이를 확인하기 위해 지리참조자 상단 메뉴에서 '보기 > 패널 > GCP 테이블'을 체크합니다.

VworldSatellite 맵을 참조하여 포인트를 하나 더 추가했습니다. 아래 화면을 보시면 GCP 테이블에서 '잔여 (픽셀)'로 표현되는 Residual 값을 확인하실 수 있습니다.

여기서 잔차 값은 RMSE(Root Mean Square Error, 평균 제곱근 오차)로 계산됩니다. GCP 포인트를 추가하면 RMSE는 이 포인트가 해당 변환 알고리즘에 얼마나 잘 맞는지, 예측값과 관측값의 차이를 비교합니다.

여기까지 QGIS에서 다중 창을 이용한 '지오레퍼런싱(Georeferencing)' 기능을 정리해 봤습니다. 지리참조자가 도킹되면서 지오레퍼런싱 작업이 한결 수월해진 것 같습니다.