引言
本文章将带大家实现灾害监测中一种常用的图像分类方法,即区域生长算法。与前面介绍的几种图像分割方法不同,区域生长算法可直接对高于Uint8灰级的数据直接进行处理,所以保持了原数据的结构形式。另外,区域生长算法涉及到的参数较多,分类的结果与参数关联度较高,所以笔者也添加了阈值参量的调试程序。
代码实现流程
- 多波段TIF图像转jpg图像
- 输入jpg图像,查询目标种子坐标
- 区域生长算法最优阈值调试
- 分割结果输出
基本原理
区域生长算法是将图像中所有种子附近的像素按照像元值的相似度和似然性进行合并、归类的二值化过程。区域生长算法的生长准则包括四邻域和八邻域两种。除了生长准则外,图像中种子点的位置与个数也与分类结果紧密相关。关于种子点的选择方式也有两种,分别是手动选点和自动选点,鉴于本文的数据量与分割精度,笔者采用了自动选点方式(其实,手动选点精度会更高一些)。
数据介绍
上官:基于Python的遥感图像NDVI批处理zhuanlan.zhihu.comPython代码实现(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.