最优阈值生长算法_结合python与遥感图像的区域生长算法实现

本文介绍了如何使用Python实现区域生长算法,特别是在灾害监测中的应用。通过多波段图像转换、坐标查询、参数调试和结果输出,探讨了区域生长算法的基本原理和最优阈值选择。最终,确定27为最佳阈值,得到了较好的图像分割效果。
摘要由CSDN通过智能技术生成

efff1ae98014d6ddfb875cbbdb76b51d.png

引言

本文章将带大家实现灾害监测中一种常用的图像分类方法,即区域生长算法。与前面介绍的几种图像分割方法不同,区域生长算法可直接对高于Uint8灰级的数据直接进行处理,所以保持了原数据的结构形式。另外,区域生长算法涉及到的参数较多,分类的结果与参数关联度较高,所以笔者也添加了阈值参量的调试程序。

代码实现流程

  • 多波段TIF图像转jpg图像
  • 输入jpg图像,查询目标种子坐标
  • 区域生长算法最优阈值调试
  • 分割结果输出

基本原理

区域生长算法是将图像中所有种子附近的像素按照像元值的相似度和似然性进行合并、归类的二值化过程。区域生长算法的生长准则包括四邻域和八邻域两种。除了生长准则外,图像中种子点的位置与个数也与分类结果紧密相关。关于种子点的选择方式也有两种,分别是手动选点和自动选点,鉴于本文的数据量与分割精度,笔者采用了自动选点方式(其实,手动选点精度会更高一些)。

7bc85539d9a8c8e15ed9bb5bce86a1f3.png
8邻域生长准则

数据介绍

上官:基于Python的遥感图像NDVI批处理​zhuanlan.zhihu.com
3a1ed3620bf62456ad72b260b13ed9d7.png

Python代码实现(jpg图像转换)

import cv2
import gdal
import numpy as np

def image_open(image):
    data = gdal.Open(image)
    if data == "None":
        print("数据无法打开")
    return data

Filepath = r"E:yynctryedata20180911_yync(DA).tif"
data = image_open(Filepath).ReadAsArray().transpose(1, 2, 0)
data1 = data[:, :, 0:3]

Normalize_data = np.zeros(data1.shape)
for d in range(data1.shape[2]):
    for i in range(data1.shape[0]):
        for j in range(data1.shape[1]):
            Normalize_data[i][j][d] = (data1[i][j][d] - np.min(data1)) / (np.max(data1) - np.min(data1))
Normalize_data = Normalize_data*256
data2 = Normalize_data.astype(np.uint8)

# data = image_open(Filepath).ReadAsArray()
# data1 = data[0:3, :, :].transpose(1, 2, 0)
# data2 = data1.astype(np.uint8)

cv2.imwrite(r"E:yynctryedata20180911_yync(DA)1.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值