IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python GDAL+numpy遥感图像处理过程中背景像元处理方法 -> 正文阅读

[Python知识库]Python GDAL+numpy遥感图像处理过程中背景像元处理方法

我们在处理遥感图像过程中,经常要涉及到背景像元的处理,遥感影像通常采用规则矩形数组存储,而有效影像区域往往是不规则数据,这就涉及到背景像元值的处理问题。

大多软件对于遥感图像背景值处理是记为0值,也有的是-9999、-19999、nodata、nan等。

有些计算,背景值不影响计算结果,这里的计算结果是指影像区域的计算结果,背景值往往还是会产生变化的,但是有些变化是非0值计算为0值了,所以我们打开影像的时候显示也没多大变化。有些计算背景值会对计算产生错误结果,后面将详细介绍。

打个比方,以影像背景值为-19999为例,比如landsat的数据产品,有的就是以该值为背景值,这个值作为背景值可以有效区分影像中的0值,以零值为背景值就容易和影像中的0值混在一起。

我们使用numpy生成一个数组,将部分值手动修改为-19999,作为背景值。这里就不用gdal读取影像数据作为数组了,如有需要可以参考以前写的专栏文章:遥感图像处理https://blog.csdn.net/soderayer/category_11011395.html

下面我们使用numpy随机生成两个数组,就设置为10行10列吧。随机范围设置在(-10000,10000)。

img_array1=np.random.randint(-10000,10000,(10,10))
img_array2=np.random.randint(-10000,10000,(10,10))
print(img_array1)
print(img_array2)

生成两个数组分别为:

[[ 8721  7329 -2775 -6596  5229  7148  1385  1711   700 -7822]
 [ -816 -8182    30 -4158  5816 -5305  5669  5625  3552  -384]
 [-3565  5693  4146  8107 -2774 -4736  3292  9236   241 -8017]
 [ 2066 -9807  -241 -6861  7028  6369  6259 -5660 -1612  5498]
 [ 6978 -1917   -39 -5350  5398 -9869  4032  3451  6517 -3606]
 [-9431 -7302  8738  3456 -3984 -8229 -9269  2655 -3206  4163]
 [-7831  2560   800 -6254  9050  3982  1317  8016  5144  1791]
 [ 9465   773  8575 -6392 -9249  2405  9490  -341 -9153  7140]
 [ 2088     4  5321  9371 -9785 -5229  3681 -6103 -6100  1233]
 [-1987  3837  4125  3227  4257 -3267  7863  1640  -583 -7665]]
[[-7408 -1577  3365  5674 -7981 -9032  9326  6460 -4230  -859]
 [ 9197 -7282  6126 -2568  6494  7313 -1999 -2293  7415  7533]
 [ 7307 -6304  8747  -793 -9423   619  9281 -3042  4621   822]
 [ 7328  5918 -5312 -2999 -8226 -6250 -5463 -9790  -200 -7922]
 [ 7339  -974 -4859 -5033 -3066 -4912 -5041  8331 -8908  2473]
 [-7276  4051  5302 -7259 -1645  5275  1527  1811 -9701  4537]
 [-7924   719  3889  8950    15  -228  8703 -5319  -621  6546]
 [-9236  5188  8391  9077  8269 -7798   817 -3914  8359 -5854]
 [-9905  2167  1676 -3345  6357  2736 -3426  3897  8539  -552]
 [  162   766  8993   175  9677  1460  3250  -193 -5935  4897]]

我们将连个数组的外围两圈改为-19999:

rows=[0,1,8,9]
cols=[0,1,8,9]
for i in rows:
    for j in range(0,10):
        img_array1[i][j]=-19999
        img_array2[i][j] = -19999
for i in cols:
    for j in range(0,10):
        img_array1[j][i]=-19999
        img_array2[j][i] = -19999
[[-19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999]
 [-19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999]
 [-19999 -19999   4146   8107  -2774  -4736   3292   9236 -19999 -19999]
 [-19999 -19999   -241  -6861   7028   6369   6259  -5660 -19999 -19999]
 [-19999 -19999    -39  -5350   5398  -9869   4032   3451 -19999 -19999]
 [-19999 -19999   8738   3456  -3984  -8229  -9269   2655 -19999 -19999]
 [-19999 -19999    800  -6254   9050   3982   1317   8016 -19999 -19999]
 [-19999 -19999   8575  -6392  -9249   2405   9490   -341 -19999 -19999]
 [-19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999]
 [-19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999]]
[[-19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999]
?[-19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999]
?[-19999 -19999 ? 8747 ? -793 ?-9423 ? ?619 ? 9281 ?-3042 -19999 -19999]
?[-19999 -19999 ?-5312 ?-2999 ?-8226 ?-6250 ?-5463 ?-9790 -19999 -19999]
?[-19999 -19999 ?-4859 ?-5033 ?-3066 ?-4912 ?-5041 ? 8331 -19999 -19999]
?[-19999 -19999 ? 5302 ?-7259 ?-1645 ? 5275 ? 1527 ? 1811 -19999 -19999]
?[-19999 -19999 ? 3889 ? 8950 ? ? 15 ? -228 ? 8703 ?-5319 -19999 -19999]
?[-19999 -19999 ? 8391 ? 9077 ? 8269 ?-7798 ? ?817 ?-3914 -19999 -19999]
?[-19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999]
?[-19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999 -19999]]

遥感图像指数运算的本质其实就是数组加减乘除运算以及各种逻辑运算。下面是数组的加减乘除运算,其实就是数组中对应位置的数值的加减乘除运算。

###数组加减乘除运算   数组和常数的加减乘除,省略
plus_array=img_array1+img_array2
print("plus_array:")
print(plus_array)
minus_array=img_array1-img_array2
print("minus_array:")
print(minus_array)
multiply_array=img_array1*img_array2
print("multiply_array:")
print(multiply_array)
divide_array=img_array1/img_array2
print("divide_array:")
print(divide_array)

计算结果:

plus_array:
[[-39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998]
 [-39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998]
 [-39998 -39998  12893   7314 -12197  -4117  12573   6194 -39998 -39998]
 [-39998 -39998  -5553  -9860  -1198    119    796 -15450 -39998 -39998]
 [-39998 -39998  -4898 -10383   2332 -14781  -1009  11782 -39998 -39998]
 [-39998 -39998  14040  -3803  -5629  -2954  -7742   4466 -39998 -39998]
 [-39998 -39998   4689   2696   9065   3754  10020   2697 -39998 -39998]
 [-39998 -39998  16966   2685   -980  -5393  10307  -4255 -39998 -39998]
 [-39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998]
 [-39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998 -39998]]
minus_array:
[[     0      0      0      0      0      0      0      0      0      0]
 [     0      0      0      0      0      0      0      0      0      0]
 [     0      0  -4601   8900   6649  -5355  -5989  12278      0      0]
 [     0      0   5071  -3862  15254  12619  11722   4130      0      0]
 [     0      0   4820   -317   8464  -4957   9073  -4880      0      0]
 [     0      0   3436  10715  -2339 -13504 -10796    844      0      0]
 [     0      0  -3089 -15204   9035   4210  -7386  13335      0      0]
 [     0      0    184 -15469 -17518  10203   8673   3573      0      0]
 [     0      0      0      0      0      0      0      0      0      0]
 [     0      0      0      0      0      0      0      0      0      0]]
multiply_array:
[[399960001 399960001 399960001 399960001 399960001 399960001 399960001
  399960001 399960001 399960001]
 [399960001 399960001 399960001 399960001 399960001 399960001 399960001
  399960001 399960001 399960001]
 [399960001 399960001  36265062  -6428851  26139402  -2931584  30553052
  -28095912 399960001 399960001]
 [399960001 399960001   1280192  20576139 -57812328 -39806250 -34192917
   55411400 399960001 399960001]
 [399960001 399960001    189501  26926550 -16550268  48476528 -20325312
   28750281 399960001 399960001]
 [399960001 399960001  46328876 -25087104   6553680 -43407975 -14153763
    4808205 399960001 399960001]
 [399960001 399960001   3111200 -55973300    135750   -907896  11461851
  -42637104 399960001 399960001]
 [399960001 399960001  71952825 -58020184 -76479981 -18754190   7753330
    1334674 399960001 399960001]
 [399960001 399960001 399960001 399960001 399960001 399960001 399960001
  399960001 399960001 399960001]
 [399960001 399960001 399960001 399960001 399960001 399960001 399960001
  399960001 399960001 399960001]]
divide_array:
[[ 1.00000000e+00  1.00000000e+00  1.00000000e+00  1.00000000e+00
   1.00000000e+00  1.00000000e+00  1.00000000e+00  1.00000000e+00
   1.00000000e+00  1.00000000e+00]
 [ 1.00000000e+00  1.00000000e+00  1.00000000e+00  1.00000000e+00
   1.00000000e+00  1.00000000e+00  1.00000000e+00  1.00000000e+00
   1.00000000e+00  1.00000000e+00]
 [ 1.00000000e+00  1.00000000e+00  4.73991083e-01 -1.02232030e+01
   2.94386077e-01 -7.65105008e+00  3.54703157e-01 -3.03616042e+00
   1.00000000e+00  1.00000000e+00]
 [ 1.00000000e+00  1.00000000e+00  4.53689759e-02  2.28776259e+00
  -8.54364211e-01 -1.01904000e+00 -1.14570749e+00  5.78140960e-01
   1.00000000e+00  1.00000000e+00]
 [ 1.00000000e+00  1.00000000e+00  8.02634287e-03  1.06298430e+00
  -1.76060013e+00  2.00916124e+00 -7.99841301e-01  4.14235986e-01
   1.00000000e+00  1.00000000e+00]
 [ 1.00000000e+00  1.00000000e+00  1.64805734e+00 -4.76098636e-01
   2.42188450e+00 -1.56000000e+00 -6.07007204e+00  1.46604086e+00
   1.00000000e+00  1.00000000e+00]
 [ 1.00000000e+00  1.00000000e+00  2.05708408e-01 -6.98770950e-01
   6.03333333e+02 -1.74649123e+01  1.51327129e-01 -1.50705020e+00
   1.00000000e+00  1.00000000e+00]
 [ 1.00000000e+00  1.00000000e+00  1.02192826e+00 -7.04197422e-01
  -1.11851494e+00 -3.08412413e-01  1.16156671e+01  8.71231477e-02
   1.00000000e+00  1.00000000e+00]
 [ 1.00000000e+00  1.00000000e+00  1.00000000e+00  1.00000000e+00
   1.00000000e+00  1.00000000e+00  1.00000000e+00  1.00000000e+00
   1.00000000e+00  1.00000000e+00]
 [ 1.00000000e+00  1.00000000e+00  1.00000000e+00  1.00000000e+00
   1.00000000e+00  1.00000000e+00  1.00000000e+00  1.00000000e+00
   1.00000000e+00  1.00000000e+00]]

从上面计算结果中,我们可以看到背景像元值-19999的变化,背景数值会跟着计算产生各种变化,那么如何让这个背景值不产生变化呢?或者将背景值每次运算结果都保持为0值。

我们可以采用一下两种办法实现:

方法一:使用条件运算强行改变背景值

条件运算函数:np.where(三元运算符)

np.where(nparray == -19999, -19999, nparray+-*/n )

?以上代码含义是,如果数组的值等于-19999,就赋值为-19999,否则计算为新的数值,即只计算非背景数值.更复杂的运算就需要设置更多种条件运算了。

在arcgis中显示nodata的背景,我们使用gdal读取的时候可以认为是0值进行处理。

方法二:采用数据记录背景值位置,待所有计算完成之后从新赋值为背景值

依旧使用条件运算函数:np.where(三元运算符)

location_array=np.where(nparray == -19999, 0, 1)

?以上代码含义是,如果数组的值等于-19999,就赋值为0,否则为1.

所有计算完成之后,我们可以使用最后计算得到的数组,将背景值都赋值为0:

end_array=end_array*location_array

?或者保留-19999:

end_array=end_array*location_array
end_array=np.where(end_array== 0, -19999, end_array)
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:44:49  更:2022-07-03 10:46:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 5:53:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码