CODEKILLER

알림 : [namoosystem.com] Codekiller 나무의사 빨간펜 인강, 재해위험성 검토의견서 QGIS 강의

반응형

재해위험성 검토의견서

DEM(수치표고모델)은 등고수치가 있는 Vector를 이용하여 TIN보간방법으로 만들 수 있고, 이렇게 만들어진 DEM에 음영기복도를 적용하고 하다 보면 삼각형 모양들을 볼 수가 있습니다. 보간의 방법에는 꽤 많은 보간법이 있고, Image 프로세싱하는 library에서도 이러한 보간법들이 상당히 많습니다. 각 산업의 분야별로 강세가 있는 보간법이 있는 것이지, 어떤 보간방법이 좋다-나쁘다의 개념은 아닙니다. 산림에서는 TIN보간이 가장 많이 사용하는 보간법이라고 볼 수 있겠는데. 먼저 DEM이라는 것을 어떻게 뽑아야 하는지 부터 확인하고 음영기복도 얘기를 계속 해볼께요.

등고선 추출 + Densify + Delaunay 삼각분할 + DEM그리드

원본 정점만 사용 Densify 적용(ex : 간격 5m)

 

DXF(등고선 폴리라인의 Elevation)나 SHP(속성 컬럼의 표고값)에서 3D 점(X, Y, Z)을 추출합니다. 단순히 정점만 쓰면 등고선 사이의 긴 구간이 삼각형 없이 텅 비는 문제가 생깁니다. 이를 막기 위해 등고선 세그먼트를 일정 간격으로 보간(Densify)합니다. 

 

[Delaunay 삼각분할 — Bowyer-Watson 알고리즘]
추출한 점들로 Delaunay 삼각망(TIN)을 구성합니다. Delaunay 조건이란 어떤 삼각형의 외접원 내부에도 다른 점이 들어오지 않도록 하는 알고리즘으로써, 이 조건을 만족하면 가능한 한 정삼각형에 가까운, 즉 찌그러지지 않은 삼각형들이 만들어져 보간 품질이 높아지게 됩니다. 

 

[그리드 버킷 공간 인덱스]

DEM 격자가 1000×1000이면 100만 번 "이 점은 어느 삼각형 안에 있나?"를 찾아야 합니다. 삼각형을 순서대로 전부 뒤지면 O(N×T)로 너무 느립니다. 그래서 그리드 버킷 공간 인덱스를 사용합니다. 

 

[DEM 그리드 & GeoTIFF 저장]

DemGrid는 row 0 = 하단(MinY, 남쪽), GeoTIFF는 row 0 = 상단(MaxY, 북쪽)입니다. 아무튼 저장을 하게 되면 QGIS에서도 올바르게 표시가 되겠죠. 

음영기복도 렌더링 (선명도)

오늘 얘기하고 싶은 것은 음영기복도 입니다. QGIS에서 음영기복도를 생성해서 Zoom으로 확대해 보면 고배율이 되어도 격자는 보일지언정 너무 선명합니다. 제가 선명하다고 말씀드리는 부분은 각각의 픽셀 격자라인이 아니라 삼각형의 형태를 말하는 것입니다. 그 형태 중에서도 삼각형의 각 면에 픽셀모양의 톱니가 보이지가 않고, 직선을 이루고 있죠!! 이 선명함이 어디서 오는지 너무 분석을 하고 싶었는데요.

QGIS 음영기복도

차이점이 무엇일까? 일반적인 픽셀형태의 이미지는 확대하게 되면 각각의 면 부분에 톱니모양의 픽셀블록이 나오게 됩니다. 하지만, PathGeometry로 하면 늘려도 깨지지 않는다는 사실은 이론적으론 이미 알고 있는 사실이죠~~. 그런데 생성한 DEM은 래스터이고 바이너리이기에 벡터화한다는 것을 인지하지 못하고 개발을 하게 됩니다. 이미지를 아무리 보간을 잘하고 크게 만들어서 ViewPort를 사용한들 이러한 삼각형의 경계면을 깨끗하게 만들 수 있는 방법은 없습니다. 이미지형태로 했을 경우에는 BitmapScalingMode.NearestNeighbor 적용했을 때가 그래도 보기에는 좋았다? 정도입니다.

 

바로 밑에 이미지로 한 경우와 Vector(PathGeometry)로 한 경우의 예시를 캡처 놓겠습니다. 당연히 DEM이 래스터형식이지만 보여줄 때는 PathGeomery로 가면 승산이 있겠죠?? 

일반적인 이미지 픽셀의 형태 WPF PathGeometry

해결책

TIN에서 음영기복도를 생성할 때 삼각형 정보를 고정 해상도 비트맵으로 래스터화를 하는데, 이 부분을 벡터로 바꾸어주면 됩니다. Zoom 배율이 낮을 때는 이미지, Zoom배율이 높을 때는 Vector형식으로 보여주면 굉장히 선명한 음영기복도를 얻을 수가 있습니다. 아래는 QGIS와 비교한 이미지를 올려드리겠습니다. 

QGIS 0.1 DEM 음영기복도
SharkGeo 0.1 DEM 음영기복도

이 작업 하나로 며칠을 실랑이했던 기억이ㅠㅠ, 무한대 Zoom으로 늘려도 삼각형의 면 부분에 톱니모양이 나오지 않고, 깨지지가 않아서 기분이 너무 좋습니다. 그리고 이 작업을 하면서 한 가지 더 알게 된 사항으로 서브픽셀 라인 정렬도 필요하구나라는 것입니다.  어떠한 라인을 양쪽에서 그린다고 해보죠!! 육안으로 쉽게 확인을 할 수는 없지만 픽셀이 1px 정도씩 계속 어긋나는 것을 인지하지 못할 수도 있습니다.

1px -> 2px처럼 되는 순간 1px

WPF에서 1px 두께의 선을 그릴 때 좌표가 정수면 선이 두 픽셀에 걸쳐 렌더링 됩니다. DPI에 맞춰 픽셀 중심(x.5)으로 스냅해야 정확히 1px이 됩니다. 오늘은 여기까지만!!

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band