>  기사  >  백엔드 개발  >  Python ArcPy가 장기 시리즈 래스터 이미지의 일괄 접합을 구현하는 방법

Python ArcPy가 장기 시리즈 래스터 이미지의 일괄 접합을 구현하는 방법

PHPz
PHPz앞으로
2023-04-28 20:16:051344검색

먼저 이 글의 구체적인 요구 사항을 명확히 하겠습니다. .tif 형식으로 다수의 원격탐사 이미지를 저장하는 폴더가 있습니다. 각 원격탐사 이미지의 파일 이름에는 아래 그림과 같이 이미지의 촬영 시간이 포함되어 있습니다. .tif格式遥感影像的文件夹,其中每一个遥感影像的文件名中都包含有该图像的成像时间,如下图所示。

Python ArcPy가 장기 시리즈 래스터 이미지의 일괄 접합을 구현하는 방법

我们希望,对于同一天成像的遥感影像进行拼接——例如,上图中具有2001年第185天成像的遥感影像10幅,每一幅都是这一天在不同空间位置的成像;同时有2001年第193天成像的遥感影像10幅。我们希望首先将第185天成像的10幅遥感影像加以拼接,随后再对第193天成像的10幅遥感影像加以拼接,以此类推。在遥感影像整体数量较少时,我们或许还可以逐一手动拼接;而当图像数量很多时,就需要借助代码来实现了。

明确了需求后,我们就可以开始具体的操作。首先,本文所需用到的代码如下。

# -*- coding: utf-8 -*-
"""
Created on Fri Apr 15 13:21:55 2022

@author: fkxxgis
"""

import os
import arcpy

tif_file_path="E:/LST/Data/NDVI/02_TIFF/"
out_file_path="E:/LST/Data/NDVI/03_Mosaic/"
arcpy.env.workspace=tif_file_path

tif_file_name=arcpy.ListRasters("*","tif")
tif_file_date=tif_file_name[0][1:8]
one_day_tif_list=[]

tif_file_example_path=tif_file_path+tif_file_name[0]
cell_size_x=arcpy.GetRasterProperties_management(tif_file_example_path,"CELLSIZEX")
cell_size=cell_size_x.getOutput(0)
value_type=arcpy.GetRasterProperties_management(tif_file_example_path,"VALUETYPE")
describe=arcpy.Describe(tif_file_example_path)
spatial_reference=describe.spatialReference

for tif_file in tif_file_name:
    if tif_file[1:8]==tif_file_date:
        one_day_tif_list.append(tif_file)
        tif_file_temp=tif_file
        if tif_file==tif_file_name[len(tif_file_name)-1]:
            out_file_name=tif_file[1:8]+".tif"
            arcpy.CreateRasterDataset_management(out_file_path,out_file_name,
                                                 cell_size,"16_BIT_SIGNED",spatial_reference,"1")
            out_file=out_file_path+out_file_name
            for tif_file_new in one_day_tif_list:
                arcpy.Mosaic_management([tif_file_path+tif_file_new],out_file)
                
    else:
        out_file_name=tif_file_temp[1:8]+".tif"
        arcpy.CreateRasterDataset_management(out_file_path,out_file_name,
                                             cell_size,"16_BIT_SIGNED",spatial_reference,"1")
        out_file=out_file_path+out_file_name
        for tif_file_new in one_day_tif_list:
            arcpy.Mosaic_management([tif_file_path+tif_file_new],out_file)
        one_day_tif_list=[]
        one_day_tif_list.append(tif_file)
        tif_file_date=tif_file[1:8]

其中,tif_file_path是原有拼接前遥感图像的保存路径,out_file_path是我们新生成的拼接后遥感影像的保存路径。

在这里,我们需要首先在资源管理器中,将tif_file_path路径下的各文件以“名称”排序的方式进行排序;随后,利用arcpy.ListRasters()函数,获取路径下原有的全部.tif格式的图像文件,并截取第一个文件的部分文件名,从而获取其成像时间;接下来,做好创建一个新的栅格文件的准备,这一部分代码的含义在本文开头提及的那一篇文章Python arcpy创建栅格、批量拼接栅格中已有提及,这里就不再赘述。

接下来,遍历tif_file_path路径下全部.tif格式图像文件。其中,我们通过一个简单的判断语句,来确定某一成像时间的遥感影像是否已经读取完毕——如果已经读取完毕,例如假如第185天成像的10幅遥感影像都已经遍历过了,那么就对这十景遥感影像加以拼接;如果还没有读取完毕,例如假如第185天成像的10幅遥感影像目前仅遍历到了第8幅,那么就不拼接,继续往下遍历。

这里相信大家也看到了为什么我们要在前期先将文件夹中的文件按照“名称”排序——是为了保证同一成像时间的所有遥感影像都排列在一起,遍历时只要遇到一个新的成像时间,程序就知道上一个成像时间的所有图像都已经遍历完毕了,就可以将上一个成像时间的所有栅格图像加以拼接。

最后,通过tif_file==tif_file_name[len(tif_file_name)-1]Python ArcPy가 장기 계열 래스터 이미지의 일괄 접합을 구현하는 방법 같은 날 촬영된 원격 감지 이미지를 이어붙이기를 바랍니다. 예를 들어 위 사진에는 2001년185일에 촬영된 10 이미지가 있습니다. > , 각각은 다른 공간 위치에 있는 오늘의 이미지입니다. 200110<code>193의 원격 감지 이미지도 있습니다. /코드>프레임. 먼저 185일에 촬영된 10 원격 감지 이미지를 함께 연결한 다음 일에 촬영된 <code>1010개의 이미지를 연결하기를 바랍니다. 193 일 /code> 원격 감지 이미지가 서로 연결됩니다. 원격 감지 이미지의 전체 수가 적으면 수동으로 하나씩 연결할 수 있지만 이미지 수가 많으면 이를 달성하기 위해 코드를 사용해야 합니다.

필요 사항을 명확히 한 후 특정 작업을 시작할 수 있습니다. 먼저, 이 글에 필요한 코드는 다음과 같습니다.

rrreee 그 중 tif_file_path는 스플라이싱 전 원본 원격탐사 이미지 저장 경로이고, out_file_path는 스플라이싱 후 새로 생성된 원격탐사 이미지 저장 경로입니다.

여기서 먼저 리소스 관리자의 tif_file_path 경로 아래에 있는 파일을 "

namePython ArcPy가 장기 시리즈 래스터 이미지의 일괄 접합을 구현하는 방법"으로 정렬한 다음 arcpy.ListRasters( ) 함수를 사용하여 정렬해야 합니다. 경로 아래에서 .tif 형식의 모든 원본 이미지 파일을 얻고 첫 번째 파일의 파일 이름 일부를 가로채서 이미징 시간을 얻은 다음 새 래스터 파일 생성 준비를 수행합니다. 이 코드 부분의 의미는 이 기사의 시작 부분에서 언급한 Python arcpy to create raster 및 배치 스플라이스 래스터 기사에서 언급되었으므로 여기서는 자세히 설명하지 않겠습니다.

🎜다음으로 tif_file_path 경로 아래의 모든 .tif 형식 이미지 파일을 탐색합니다. 그 중 간단한 판단문을 사용하여 특정 촬영 시간의 원격 탐사 이미지를 읽었는지 여부를 확인합니다. 예를 들어 185일에 촬영된 10개의 이미지를 읽었는지 여부는 모두 원격 감지 이미지가 통과되면 판독이 완료되지 않은 경우, 예를 들어 185일에 촬영된 10개의 원격 감지 이미지가 현재 8번째 프레임에서는 스플라이싱이 없으며 순회가 계속됩니다. 🎜🎜여기 있는 모든 사람들은 초기 단계에서 "🎜이름🎜"에 따라 폴더의 파일을 정렬해야 하는 이유를 알고 있다고 믿습니다. 순회 🎜새로운 이미징 시간🎜을 만나는 한, 프로그램은 🎜이전 이미징 시간🎜의 모든 이미지가 순회되었음을 알게 되며 🎜이전 이미징 시간🎜의 모든 래스터 이미지를 연결할 수 있습니다. 🎜🎜마지막으로 tif_file==tif_file_name[len(tif_file_name)-1]의 판단을 이용하여 폴더의 🎜마지막 🎜이미지 파일이 트래버스되었는지 확인합니다. 그렇다면 현재 이미징 시간🎜에 모든 이미지를 연결하고 코드 실행을 완료해야 합니다. 🎜🎜🎜IDLE(Python GUI)🎜에서 코드를 실행하세요. 코드가 실행된 후 결과 폴더를 살펴보겠습니다. 이미 이미징 시간에 따라 이미지가 별도로 이어져 있음을 알 수 있다. 🎜🎜🎜🎜

위 내용은 Python ArcPy가 장기 시리즈 래스터 이미지의 일괄 접합을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제