여러 래스터를 더 균일하게 만듭니다.


10

나는 지속적으로 연결되어야하는 래스터를 가져 왔지만 대신 그들 사이에 일종의 경계 그리드를 만듭니다. 이것이 개별 래스터 간의 보정 문제라고 생각할 수 있지만 데이터 방식으로 실행하는 방법을 잘 모르겠습니다.

모든 사람이 전에 이와 같은 것을 경험하고 가능한 해결책을 알고 모든 래스터의 전체가 더 매끄럽게되도록하십시오.

이들 모두는 지리적으로 연결되어 있어야합니다. 따라서 광장의 '테두리'의 문제.

Windows에서 QGIS를 사용하고 있습니다.

여기에 이미지 설명을 입력하십시오

답변:


11
  1. 래스터를 하나로 병합 할 수 있습니다.

    • 툴바에서 :

      래스터> 기타> 병합

    • Processing Toolbox에서 :

      GDAL / OGR> 기타> 병합

    • GDAL 콘솔에서 :

      gdal_merge.py -o merged.tif input1.tif input2.tif
      

  1. 또는 가상 래스터를 작성하십시오.

    • 래스터> 기타> 가상 래스터 빌드

1
가상 래스터 구축시 +1 이렇게하면 병합 된 단일 이미지처럼 작동하는 매우 작은 파일이 만들어집니다.
Alexandre Neto

@AlexandreNeto-고마워, 별도의 래스터에 비해 파일 크기의 차이가 상당히 비쌀 수 있음을 알았습니다.
Joseph

병합 또는 빌드 가상 래스터를 선택할 때 프로세스를 시작할 수 없다는 오류가 발생합니다. porgram이 없거나 올바른 권리가 없습니다. 따라서 모든 래스터를 레이어 메뉴에로드하고 거기에서 선택하여 병합 또는 빌드에 성공했습니다. Gdal_merge.bat 명령 줄이 너무 길 수 있습니다. 최소한 inputx.tif는 1000 x (다른 래스터)에서 작업을 일시 중단 할 수 있습니다
MichaelR

@Michael-이상한 오류지만 결과를 얻는 또 다른 방법을 찾았습니다 :)
Joseph

1
@Michael 명령 행 gdalbuildvrt에서 파일 목록을 포함하는 파일의 파일 이름을 입력 할 수 있으며 많은 이미지 파일을 인수로 제공 할 수 있습니다. gdalbuildvrt -input_file_list my_liste.txt doq_index.vrt
Detlev

3

이 mosaiked 모양의 이유는 각 단일 이미지가 전체 최소 / 최대가 아니라 이미지 최소에서 최대 이미지까지 확장 된 그레이 스케일로 그려지기 때문입니다. 모든 이미지를 하나로 병합하면 최소 / 최대 하나만 있습니다. VRT는 모든 이미지를 하나로 취급하므로 VRT도 마찬가지입니다 (VRT 파일을 살펴보면 공통 통계가 표시됨).

merge와 VRT가 둘 다 옵션이 아닌 경우 다음 스크립트가 도움이 될 수 있습니다.

첫 번째 루프에서 모든 레이어를 반복하여 래스터를 선택하고 최소 / 최대 간격의 추정치를 얻습니다. 이것은 QGIS 자체가 작동하는 방식입니다. 이 최소 / 최대 값에서 글로벌 최소 / 최대를 계산합니다.

제 2 루프에서, 모든 래스터 층에 대한 렌더러는 그레이 스케일이 전체 최소 / 최대 간격에 걸쳐 신장되도록 구성된다.

gmin = 9999
gmax = -9999
layers = []
# loop over all layers, take rasters and estimate min, max values
for layer in iface.mapCanvas().layers():
    if isinstance(layer, QgsRasterLayer):
        # change percentages and sample size to increase or decrease accuracy
        min_max = layer.dataProvider().cumulativeCut(1, 0.02, 0.98, theSampleSize=250000)
        gmin = min(gmin, min_max[0])
        gmax = max(gmax, min_max[1])
        layers.append(layer)

# for all rasters create a single band gray scale renderer with 
# gray scale stretched across the interval [gmin..gmax]
for rasterlayer in layers:
    renderer = QgsSingleBandGrayRenderer(rasterlayer.dataProvider(), 1)
    # take the first band (0)
    ce = QgsContrastEnhancement(rasterlayer.dataProvider().dataType(0))
    ce.setContrastEnhancementAlgorithm(QgsContrastEnhancement.StretchToMinimumMaximum)
    ce.setMinimumValue(gmin)
    ce.setMaximumValue(gmax)
    renderer.setContrastEnhancement(ce)

    rasterlayer.setRenderer(renderer)

# refresh canvas to show changes
iface.mapCanvas().refresh()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.