GDAL如何配置在IDEA中自行百度

环境:IDEA2021.2.3+jdk11.0.1+GDAL(release-1928-x64-gdal-3-5-2-mapserver-8-0-0)

1.首先来了解一下BSQ,BIL,BIP格式的定义(插图来源于@CSDN溯水xiangling)

(1)BSQ (band sequential):像素按波段顺序存储,先保存第一个波段,保存完毕后再保存第二个波段,以此类推。

(2)BIL(band interleaved by line format):像素按行存储,先保存第一个波段的第一行,再保存第二个波段的第一行,以此类推。

 (3)BIP(band interleaved by pixel format):按像元顺序存储,先保存第一个波段的第一个像元,再保存第二个波段的第一个像元,以此类推。

2.编程实现:

(1)环境:IDEA2021.2.3+jdk11.0.1+GDAL(release-1928-x64-gdal-3-5-2-mapserver-8-0-0)

(2)在IDEA里如何配置GDAL自行百度

(3)实现:

import org.gdal.gdal.Band;
import org.gdal.gdal.Dataset;
import org.gdal.gdal.gdal;
import org.gdal.gdalconst.gdalconstConstants;/*** @Author: jue_chen* @Date: 2022/10/16/ 19:56* @Attention: 转载, 引用请注明出处*/public class CalculateBands {int iXSize;     //图像的列数int iYSize;     //图像的行数int bandsNum;   //图像的波段数int[][][] bandArr;      //存储图像的所有灰度值,BSQ格式//获取一副图像的波段信息public void getBands(String srcPath) {gdal.AllRegister();     //支持所有驱动//以只读方式读取数据存入Dataset类型里Dataset dataset = gdal.Open(srcPath, gdalconstConstants.GA_ReadOnly);   //判断文件是否读取成功if (dataset == null) {System.out.println("文件读取失败");System.out.println(gdal.GetLastErrorMsg());System.exit(1);}iXSize = dataset.getRasterXSize();      //获取图像列数iYSize = dataset.getRasterYSize();      //获取图像行数bandsNum = dataset.GetRasterCount();   //获取图像波段数//定义波段类型的数组存放每一波段的信息Band[] band = new Band[bandsNum];for (int i = 0; i < bandsNum; i++) {band[i] = dataset.GetRasterBand(i + 1); //图像波段的索引值从1开始,不是0}//三维数组存放具体波段的灰度值,第一维存放波段数,第二维存放波段的行数,第三维存放波段的列数,以BSQ格式存储bandArr = new int[bandsNum][iYSize][iXSize];for (int i = 0; i < bandsNum; i++) {System.out.println("第" + (i + 1) + "波段");for (int j = 0; j < bandArr[0].length; j++) {band[i].ReadRaster(0, j, iXSize, 1, bandArr[i][j]);     //一次读取一行灰度值数据//读取结果输出测试for (int k = 0; k < bandArr[0][0].length; k++) {System.out.print(bandArr[i][j][k] + "\t");}System.out.println();}System.out.println();}System.out.println();}//打印图像所有波段的灰度值public void printBandArr(int[][][] bandArr) {for (int i = 0; i < bandArr.length; i++) {for (int j = 0; j < bandArr[0].length; j++) {for (int k = 0; k < bandArr[0][0].length; k++) {System.out.print(bandArr[i][j][k] + "\t");}System.out.println();}System.out.println();}}//获得BSQ格式的数组public int[][][] getBSQ() {return bandArr;}//BSQ转BILpublic int[][][] BSQtoBIL(int[][][] bandArrBSQ) {//第一维存放波段的行数,第二维存放波段数,第三维存放波段的列数int[][][] bandArrBIL = new int[bandArrBSQ[0].length][bandArrBSQ.length][bandArrBSQ[0][0].length];for (int i = 0; i < bandArrBSQ[0].length; i++) {   //BSQ的第二维大小for (int j = 0; j < bandArrBSQ.length; j++) {  //BSQ的第一维大小for (int k = 0; k < bandArrBSQ[0][0].length; k++) { //BSQ的第三维大小bandArrBIL[i][j][k] = bandArrBSQ[j][i][k];}}}return bandArrBIL;}//BSQ转BIPpublic int[][][] BSQtoBIP(int[][][] bandArrBSQ) {//第一维存放波段的行数,第二维存放波段的列数,第三维存放波段数int[][][] bansArrBIP = new int[bandArrBSQ[0].length][bandArrBSQ[0][0].length][bandArrBSQ.length];for (int i = 0; i < bandArrBSQ[0].length; i++) {   //BSQ第二维大小for (int j = 0; j < bandArrBSQ[0][0].length; j++) { //BSQ第三维大小for (int k = 0; k < bandArrBSQ.length; k++) {   //BSQ第一维大小bansArrBIP[i][j][k] = bandArrBSQ[k][i][j];}}}return bansArrBIP;}//BIL转BSQpublic int[][][] BILtoBSQ(int[][][] bandArrBIL) {//第一维存放波段数,第二维存放波段行数,第三维存放波段列数int[][][] bandArrBSQ = new int[bandArrBIL[0].length][bandArrBIL.length][bandArrBIL[0][0].length];for (int i = 0; i < bandArrBIL[0].length; i++) {    //BIL第二维大小for (int j = 0; j < bandArrBIL.length; j++) {   //BIL第一维大小for (int k = 0; k < bandArrBIL[0][0].length; k++) { //BIL第三维大小bandArrBSQ[i][j][k] = bandArrBIL[j][i][k];}}}return bandArrBSQ;}//BIL转BIPpublic int[][][] BILtoBIP(int[][][] bandArrBIL) {//第一维存放波段的行数,第二维存放波段的列数,第三维存放波段数int[][][] bandArrBIP = new int[bandArrBIL.length][bandArrBIL[0][0].length][bandArrBIL[0].length];for (int i = 0; i < bandArrBIL.length; i++) {   //BIL第一维大小for (int j = 0; j < bandArrBIL[0][0].length; j++) {   //BIL第三维大小for (int k = 0; k < bandArrBIL[0].length; k++) {  //BIL第二维大小bandArrBIP[i][j][k] = bandArrBIL[i][k][j];}}}return bandArrBIP;}//BIP转BSQpublic int[][][] BIPtoBSQ(int[][][] bandArrBIP) {//第一维存放波段数,第二维存放波段行数,第三维存放波段列数int[][][] bandArrBSQ = new int[bandArrBIP[0][0].length][bandArrBIP.length][bandArrBIP[0].length];for (int i = 0; i < bandArrBIP[0][0].length; i++) { //BIP第三维大小for (int j = 0; j < bandArrBIP.length; j++) {   //BIP第一维大小for (int k = 0; k < bandArrBIP[0].length; k++) { //BIP第二维大小bandArrBSQ[i][j][k] = bandArrBIP[j][k][i];}}}return bandArrBSQ;}//BIP转BILpublic int[][][] BIPtoBIL(int[][][] bandArrBIP) {//第一维存放波段的行数,第二维存放波段数,第三维存放波段的列数int[][][] bandArrBIL = new int[bandArrBIP.length][bandArrBIP[0][0].length][bandArrBIP[0].length];for (int i = 0; i < bandArrBIP.length; i++) {   //BIP第一维大小for (int j = 0; j < bandArrBIP[0][0].length; j++) {  //BIP第三维大小for (int k = 0; k < bandArrBIP[0].length; k++) { //BIP第二维大小bandArrBIL[i][j][k] = bandArrBIP[i][k][j];}}}return bandArrBIL;}public static void main(String[] args) throws Exception {CalculateBands img = new CalculateBands();img.getBands("D:\\Project\\IDEA_Project\\RS01\\src\\rs01\\img\\9.png"); //读入图像int img_rows = img.iYSize;  //图像灰度值的行数int img_cols = img.iXSize;  //图像灰度值的列数int img_bandNum = img.bandsNum; //图像的波段数System.out.println("读入图像每一波段的灰度值行数为:" + img_rows);System.out.println("读入图像每一波段的灰度值列数为:" + img_cols);System.out.println("读入图像的波段数为:" + img_bandNum);System.out.println();int[][][] img_bandArrBSQ = img.getBSQ();    //获取以BSQ格式的存储的数组//BSQ转为BILint[][][] img_bandArrBIL = img.BSQtoBIL(img_bandArrBSQ);System.out.println("BIL的存储格式");img.printBandArr(img_bandArrBIL);//BSQ转为BIPint[][][] img_bandArrBIP = img.BSQtoBIP(img_bandArrBSQ);System.out.println("BIP的存储格式");img.printBandArr(img_bandArrBIP);//BIL转为BSQint[][][] img_bandArrBSQ_1 = img.BILtoBSQ(img_bandArrBIL);System.out.println("BSQ的存储格式");img.printBandArr(img_bandArrBSQ_1);//BIL转为BIPint[][][] img_bandArrBIP_1 = img.BILtoBIP(img_bandArrBIL);System.out.println("BIP的存储格式");img.printBandArr(img_bandArrBIP_1);//BIP转为BSQint[][][] imgBandArrBSQ_2 = img.BIPtoBSQ(img_bandArrBIP);System.out.println("BSQ的存储格式");img.printBandArr(imgBandArrBSQ_2);//BIP转为BILint[][][] imgBandArrBIL_2 = img.BIPtoBIL(img_bandArrBIP);System.out.println("BIL的存储格式");img.printBandArr(imgBandArrBIL_2);}
}

(4)结果:仅展示BSQ转BIL,BIP的测试结果

①图像的元数据

 ②读取为BSQ格式的存储格式

 ②BSQ转BIL

③BSQ转BIP 

数字图像处理之BSQ,BIL,BIP的存储格式相互转换算法,用Java+GDAL实现,附源码相关推荐

  1. 遥感图像存储格式BSQ/BIL/BIP的理解

    遥感图像存储格式BSQ/BIL/BIP的理解 BSQ(波段顺序格式) BIL(波段按行交叉格式) BIP(波段按像元交叉格式) BSQ(band sequential format)是按波段保存,也就 ...

  2. 数字图像处理领域的二十四个典型算法及vc实现、第一章

    数字图像处理领域的二十四个典型算法及vc实现.第一章 作者:July   二零一一年二月二十六日. 参考:百度百科.维基百科.vc数字图像处理. --------------------------- ...

  3. 数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF

    数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF 一.概述 参考:特征点匹配+特征检测方法汇总 ORB的全称是Oriented ...

  4. 数字图像处理领域的二十四个典型算法

    数字图像处理领域的二十四个典型算法及vc实现.第一章 一.256色转灰度图 二.Walsh变换 三.二值化变换 四.阈值变换 五.傅立叶变换 六.离散余弦变换 数字图像处理领域的二十四个典型算法及vc ...

  5. 基于FPGA数字时钟的设计(附源码)

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注"FPGA技术江湖"微信公众号,在"闯荡江湖"."行侠仗义"栏里获取其 ...

  6. 4个数字计算24点java算法(附源码)

    今天看到一个帖子说程序员面试考24点算法,想为什么不用程序来实现呢.在网上没有找到非常完美的算法,包括那个24点计算器,给出的结果重复的也较多.所以自己写了一个.在这儿贴出来给大家分享一下.附源码. ...

  7. (附源码)python数字图像处理课程平台 毕业设计 242339

    Python数字图像处理课程平台的开发 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人 ...

  8. (附源码)Python数字图像处理课程平台 毕业设计242339

    Python数字图像处理课程平台的开发 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人 ...

  9. pyTorch入门(六)——实战Android Minist OpenCV手写数字识别(附源码地址)

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为4239字,预计阅读12分钟 前言 前面几篇文章实现了pyTorch训练模型,然后在Windows平台用C++ OpenCV D ...

最新文章

  1. 火爆国外的一份PyCharm快捷键和Python代码速查表
  2. 工业机器人 答案 韩建海_中国将连续8年成为工业机器人第一大市场,还将持续多久?...
  3. memoryTraining记忆训练小游戏
  4. IT运维面试问题总结-运维工具、开源应用(Ansible、Ceph、Docker、Apache、Nginx等)
  5. drupal 多语言_小小的开源机器人,Drupal的创造者,应对我们不断变化的经济,以及更多
  6. 河南理工大学计算机学院课表,河南理工大学实验课课程表.doc
  7. 翻译:如何在Mac OS X中设置文件权限chmod
  8. Windows注册表内容详解
  9. 王之泰201771010131《面向对象程序设计(java)》第二周学习总结
  10. OpenBmc开发13:添加传感器(fan)
  11. 大学计算机课程实验指导书,《大学计算机基础》课程实验指导书.doc
  12. AI赋能智慧图书馆,能否出现真正的书天堂?
  13. 它拖慢你的网速,还泄露你的个人隐私,学一招治治它
  14. Python turtle画玫瑰
  15. 中文用户输入纠错 综述
  16. win7升级win10方法
  17. 整顿职场,从 ROC 曲线开始
  18. ILSVRC2015数据集百度云下载链接
  19. AspectJ in Action 第2版 中文目录
  20. 点心发布新版安卓优化大师

热门文章

  1. cmake错误集锦:unkown arguments specified
  2. 微信小程序图书馆座位预约系统设计与实现 毕业设计论文 课题题目参考(1)功能需求、界面修购
  3. 安装Tomcat详细步骤
  4. 【tips】ORM - SQLAlchemy操作MySQL数据库
  5. 关于直播,所有的技术细节
  6. 氢原子角向概率密度分布matlab,求氢原子角向概率密度.PPT
  7. 为什么说当下重仓IPFS/FIL才是关键
  8. 【AI数学原理】概率机器学习(四):半朴素贝叶斯之TAN算法实例
  9. 流程控制语句break continu return 及方法(函数)
  10. 2017ife_yaoyao学院_task1