9.2 栅格图层符号化单波段灰度渲染

2024-07-09 1035阅读

文章目录

  • 前言
  • 单波段灰度
    • QGis设置为单波段灰度
    • 二次开发代码实现单波段灰度
    • 总结

      前言

      • 介绍栅格图层数据渲染之单波段灰度显示
      • 说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps

        单波段灰度

        • 以“3420C_2010_327_RGB_LATLNG.tif”数据为例,在QGis中加载默认显示如下图

          9.2 栅格图层符号化单波段灰度渲染

          QGis设置为单波段灰度

          • 在图层属性的“Symbology”选项卡中选择“Render type”为“Singleband gray”,如图所示

            9.2 栅格图层符号化单波段灰度渲染

          • 在“Gray band”中选择需要渲染的波段;在“Color gradient”中选择渐变方向,包括从黑色到白色(Black to white)和从白色到黑色(White to Black)两种方式。
          • 在“Contrast enhancement”中选择对比度增强方法,包括无增强(No enhancement)、拉伸到最小值和最大值之间的范围(Stretch to MinMax)、拉伸并裁剪到最小值和最大值之间的范围(Stretch and clip to MinMax)、裁剪到最小值和最大值之间的范围(Clip to MinMax)。经过裁剪后,超出范围的像元将不显示在地图画布上;反之,则显示为黑色或白色。
          • 在“Min”和“Max”中输入渐变区域的最小值和最大值,或者通过“Min / Max ValueSettings”中的四个选项进行自动设置。
            • User defined:用户自定义最大值和最小值。
            • Cumulative count Cut:按照数值从小到大排列,仅保留一定百分比内的数值,去除可能存在的异常值。
            • Min / max:设置为波段内数值的最小值或最大值。
            • Mean +/- standard deviation:取平均值左右两侧一个标准差范围内的数值,以及μ- σ与μ+σ之间的数值(μ表示平均值,σ表示标准差)。
            • 在“Statistics extent”中选择上述设置的统计范围,包括整个影像(Whole raster)、当前范围(Current canvas)和随范围变化(Updated canvas)。随范围变化指当用户改变地图范围时,栅格数据渲染的最大值和最小值也随之变化。
            • 在“Accuracy”中选择最大值和最小值的计算精度,包括估计(较快)[Estimate (faster)]和精确(较慢)[Actual (slower)]两种。
            • “Layer Rendering”选项区域设置显示效果,包括混合模式(Blending mode)、亮度(Brightness)、对比度(Contrast)、饱和度(Saturation)、灰阶(Grayscale)等。
            • 在“Resampling”选项区域可以设置显示效果的重采样方法,包括上采样(放大地图时插值数据)和下采样(缩小地图时抽取数据)两种。上采样(Zoom in)包括最邻近法(Nearest neighbour)、双线性法(Bilinear)和三次立方法(Cubic);下采样(Zoom out)包括最邻近法(Nearest neighbour)和平均值法(Average)。另外,还可以在“Oversampling”中选择过采样系数(默认为2,使用最邻近法时无效)。通常,默认的最邻近法渲染速度最快,但是使用双线性法(Bilinear)和三次立方法(Cubic)时渲染效果更好。
            • 属性设置完成后,图层渲染效果如下图

              9.2 栅格图层符号化单波段灰度渲染

              二次开发代码实现单波段灰度

              • 类QgsSingleBandGrayRenderer是单波段灰度渲染器,详情见文档,类图如下

                9.2 栅格图层符号化单波段灰度渲染

              • 其构造函数有两个参数:QgsSingleBandGrayRenderer( QgsRasterInterface *input, int grayBand );,分别传入dataProvider和波段序号,代码如下
                    const int grayBand = 1;
                    QgsSingleBandGrayRenderer *renderer = new QgsSingleBandGrayRenderer( layer->dataProvider(), grayBand );
                
                • 调用类的成员函数setters,如void setGradient( Gradient gradient )设置参数,代码如下
                      renderer->setGradient(QgsSingleBandGrayRenderer::BlackToWhite);//
                      QgsContrastEnhancement *ce = new QgsContrastEnhancement( ( Qgis::DataType )(layer->dataProvider()->dataType( grayBand ) ) );
                      ce->setContrastEnhancementAlgorithm(QgsContrastEnhancement::StretchToMinimumMaximum);
                      ce->setMinimumValue(-1);
                      ce->setMaximumValue(2630);
                      renderer->setContrastEnhancement(ce);
                      QgsRasterMinMaxOrigin mmOrigin = renderer->minMaxOrigin();
                      renderer->setMinMaxOrigin(mmOrigin);
                      //QgsRasterLayer中有Layer Rendering和Resampling中的相应设置
                  
                  • 最后设置图层的渲染器即可
                  • 完整测试代码如下
                    void MainWindow::rasterSinglebandGraySlot()
                    {
                        //添加测试图层
                        QgsRasterLayer *layer = addTestRaster("maps/raster/3420C_2010_327_RGB_LATLNG.tif");
                        //
                        const int grayBand = 1;
                        QgsSingleBandGrayRenderer *renderer = new QgsSingleBandGrayRenderer( layer->dataProvider(), grayBand );
                        renderer->setGradient(QgsSingleBandGrayRenderer::BlackToWhite);//
                        QgsContrastEnhancement *ce = new QgsContrastEnhancement( ( Qgis::DataType )(layer->dataProvider()->dataType( grayBand ) ) );
                        ce->setContrastEnhancementAlgorithm(QgsContrastEnhancement::StretchToMinimumMaximum);
                        ce->setMinimumValue(-1);
                        ce->setMaximumValue(2630);
                        renderer->setContrastEnhancement(ce);
                        QgsRasterMinMaxOrigin mmOrigin = renderer->minMaxOrigin();
                        renderer->setMinMaxOrigin(mmOrigin);
                        //QgsRasterLayer中有Layer Rendering和Resampling中的相应设置
                        layer->setRenderer(renderer);
                    }
                    
                    • 测试效果如下

                      9.2 栅格图层符号化单波段灰度渲染

                      9.2 栅格图层符号化单波段灰度渲染

                      总结

                      • 介绍了栅格图层单波段灰度渲染的使用
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]