GDAL影像读取并配置缩放的插值方法

影像读取 并缩放

读取大影像某一部分,并缩放到指定大小,我们有时会用如下代码:

#include "gdal.h"
#include "gdal_priv.h"
#include "gdalwarper.h"

void main()
{
    GDALAllRegister();
    CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");//support Chinese

    GDALDataset* readDataSet = (GDALDataset*)GDALOpen(inputFile.c_str(),GA_ReadOnly);
    if (readDataSet == NULL )
    {
        return;
    }
    int width = readDataSet->GetRasterXSize();
    int height = readDataSet->GetRasterYSize();
    int bandCount = readDataSet->GetRasterCount();

    int tilesize = 50;
    unsigned char* data = new unsigned char[tilesize*tilesize*bandCount];
    if (readDataSet->RasterIO(GDALRWFlag::GF_Read,0,0,width,height,data,tilesize,tilesize,GDT_Byte,bandCount,NULL,0,0,0)==CPLErr::CE_Failure)
    {
        delete readDataSet;readDataSet=NULL;
        delete data;
        return;
    }}

如果这里影像大小,非常大时,几G到几十G,上百G的时候,会可能遇到什么问题?

让我们从RasterIO接口谈起,跟其中代码,得知

1、从影像金字塔取数据。根据缩小到的TileSize,它会从影像金字塔中取相应层级的数据。

2、取到数据后,会进行最近邻插值。

由于最近邻插值效果不佳,会导致得到的数据,都是相应的噪声,麻点现象。

GDAL从2.0版本支持RasterIO接口进行插值算法的配置,仅仅进行简单的配置,就可以解决这个问题。

   GDALRasterIOExtraArg exterArg;
    INIT_RASTERIO_EXTRA_ARG(exterArg);
    exterArg.eResampleAlg = GDALRIOResampleAlg::GRIORA_Bilinear;
   readDataSet->RasterIO(GDALRWFlag::GF_Read,0,0,width,height,data,tilesize,tilesize,GDT_Byte,bandCount,NULL,0,0,0,&exterArg);

如下写出进行验证

  GDALDriver *pDriver;
    pDriver = GetGDALDriverManager()->GetDriverByName("GTiff");

    GDALDataset* gdalDataset;
    gdalDataset = pDriver->Create(outputFile.c_str(),tilesize,tilesize,bandCount,GDT_Byte,NULL);
    gdalDataset->RasterIO(GF_Write,0,0,tilesize,tilesize,data,tilesize,tilesize,GDT_Byte,bandCount,NULL,0,0,0);
    GDALClose(gdalDataset);
    gdalDataset = NULL;

参考:https://trac.osgeo.org/gdal/wiki/rfc51_rasterio_resampling_progress

时间: 2024-08-28 19:51:25

GDAL影像读取并配置缩放的插值方法的相关文章

golang 读取 ini配置信息

package main //BY: [email protected]//这个有一定问题   如果配置信息里有中文就不行//[Server] ;MYSQL配置//Server=localhost   ;主机//golang 读取 ini配置信息//http://www.widuu.com/archives/02/961.htmlimport (  "fmt"  "github.com/widuu/goini"  //"runtime"  //&

汇编读取PCI配置空间

学习PCI:http://blog.sina.com.cn/s/articlelist_1685243084_3_1.html 1 ;------------------------------------------------ 2 ; 3 ;程序功能: 读取PCI 配置信息,存入文件zpci_config.txt 4 ; 通过端口CF8h / CFCh 来读取 5 ;运行环境: DOS + MASM5 6 ;时间: 2015/08/25 7 ; 8 ;--------------------

[转载]matlab高光谱影像读取、保存、分块

原文地址:matlab高光谱影像读取.保存.分块作者:wind_静水流深_cloud 高光谱影像由于含有近百个波段,用matlab自带的图像读写函数imread和imwrite往往不能直接操作,以下针对高光谱影像读取.保存图像数组以及影像分块予以说明: 影像读取: 利用multibandread函数,此函数用于读取多波段二进制影像文件.至于何为二进制影像文件,简单地说ENVI主菜单file-save file as-envi standard得到的就是二进制影像文件,有时甚至会看到后缀名为bsq

GDAL库——读取图像并提取基本信息

GDAL库是一个跨平台的栅格地理数据格式库,包括读取.写入.转换.处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持).它使用了一个单一的抽象数据模型就支持了大多数的栅格数据.这里有GDAL库支持的格式:http://www.gdal.org/formats_list.html 注:本文在Qt开发环境下使用GDAL库. 在Qt中使用GDAL库时,除了要加gdal_priv.h头文件外,还需要在xxx.pro文件内加上LIBS += -lgdal ,文件用可编辑的文档打开. 使用GDAL

第十四章 springboot + profile(不同环境读取不同配置)

具体做法: 不同环境的配置设置一个配置文件,例如:dev环境下的配置配置在application-dev.properties中:prod环境下的配置配置在application-prod.properties中. 在application.properties中指定使用哪一个文件 1.application-dev.properties(dev环境下的配置) 1 profile = dev_envrimont 2.application-prod.properties(prod环境下的配置)

从二进制数据流中构造GDAL能够读取的图像数据

在非常多时候.我们的图像数据往往都不是文件方式存储在磁盘上.而是可能从网络或者数据库中获取的是二进制的图像数据流.最简单的方式和最easy想到的方式就是将这个文件流保存到磁盘上形成一个文件,然后再使用GDAL来打开进行处理. 可是这样有一个不太好的地方就是须要生成一个磁盘的暂时文件.并且在磁盘上折腾了一圈后会添加不必要的系统开销. 针对这个文件.GDAL库里面已经有现成的API来进行处理.以下就使用一个简单的样例来进行说明,代码例如以下: GByte *GetStream(const char*

部分转 Java读取ini配置

转自: http://www.cnblogs.com/Jermaine/archive/2010/10/24/1859673.html 读取ini的配置的格式如下: [section1] key1=value1 [section2] key2=value2 .... 原blog中考虑: 其中可能一个Key对应多个value的情况. 代码如下: 1 import java.io.BufferedReader; 2 import java.io.FileReader; 3 import java.i

使用Spring的ReloadableResourceBundleMessageSource读取properties配置

应用: 1.后台验证提示信息: 2.异常信息. spring配置文件如下: <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="classpath:message-resource"

springboot 不同环境读取不同配置

1. 3个配置文件(更多环境可以建多个): application.properties  (公共配置文件) application-dev.properties  (开发环境) application-prod.properties  (生产环境) 2. 设置 application.properties , 如使用开发环境用以下代码,deployment时只要把 dev 改成 prod 即可 spring.profiles.active=dev 环境公共的配置写在application.pr