python 遥感图像分类

1 篇文章 0 订阅

图像分类的常用方法一般包括监督分类和非监督分类两大类,本文采用阈值切片法对遥感影像进行分类,使用数据为landsat8遥感影像,下载地址:

http://github.com/GeospatialPython/Learn/blob/master/thermal.zip?raw=true

该影像为单波段遥感影像

利用切片法对上述影像进行分类,代码如下:

from osgeo import gdal_array

#输入文件
src = "./thermal/thermal.tif"

# 输出文件名
tgt = "classified.jpg"

#使用gdal库加载图片到numpy
srcArr = gdal_array.LoadFile(src)

#根据类别数目将直方图分割成20个颜色区间
classes = gdal_array.numpy.histogram(srcArr, bins = 20)[1]

#颜色查找表的记录数4必须是len(classes)+1,声明RGN元组
lut =  [[255, 0, 0], [191, 48, 48], [166, 0, 0], [255, 64, 64], [255, 155, 155],
       [255, 116, 0], [191, 113, 48], [255, 178, 115], [0, 153, 153], [29, 115, 155],
       [0, 99, 99], [166, 75, 0], [0, 204, 0], [51, 204, 204], [255, 150, 64],
       [92, 204, 204], [38, 153, 38], [0, 133, 0], [57, 230, 57], [103, 230, 103],
       [184, 138, 0]]

#分类初始值
start = 1
#创建一个RGB颜色的JPEG图片输出
rgb = gdal_array.numpy.zeros((3, srcArr.shape[0], srcArr.shape[1],),gdal_array.numpy.float32)

#处理所有类并声明颜色
for i in range(len(classes)):
    mask = gdal_array.numpy.logical_and(start <= srcArr, srcArr <= classes[i])
    for j in range(len(lut[i])):
        rgb[j] = gdal_array.numpy.choose(mask, (rgb[j], lut[i][j]))
    start = classes[i] + 1

#保存图片
output = gdal_array.SaveArray(rgb.astype(gdal_array.numpy.uint8), tgt, format = "JPEG")
oupput = None

 将图像分为20个类,分类结果如下所示:

如上图所示,20个类别分类效果较好。在实验过程中,我在原来实验的基础上,又增加了12个类别,总共32个类,效果如下所示:

分的太细了,出现了过拟合现象,所以说,分类可不是分的越细越好哦~。然后我又将类别减少到10个,输出分类结果如下所示:

分类效果不太明显,好多类别没有分出来,出现了欠拟合现象。

总结:在分类的过程中,要对研究区域影像有足够的了解,对地物类别要有有所了解,以避免在分类过程中出现欠拟合或过拟合现象。

  • 9
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值