改进 DBSCAN 算法
传统的DBSCAN算法邻域定义为给定光子间的欧几里得距离,搜索域定义为圆形。通过观察分析噪声光子与信号光子分布可知,太阳光的噪声光子分布于整个研究区的上空与地面下,而且沿轨方向的光子云密度与垂轨方向的光子云密度差异很大,传统的圆形搜索域并不适用于星载光子云数据的去噪处理。
在森林研究区的光子不仅会集中在地面附近,而且会分布于冠层区域,在森林植被覆盖度适中情况下,地面光子密度会高于冠层光子密度,覆盖度较大情况下,地面光子密度会低于冠层光子密度。由于森林植被类型不同,其反射表面轮廓比人工制造建物的结构要复杂的多,这为光子云精准去噪提升了难度。因此根据光子分布形式,后续学者采用基于椭圆搜索域的DBSCAN 改进算法,算法将光子云数据搜索域改为水平方式的椭圆形状。
完整代码包括:
1.示例图完整代码;
2.改进DBSCAN完整代码。
内容如下:
1.示例图完整代码如下:
输入数据:
import os
import random
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
import pandas as pd
import tkinter as tk
from tkinter import filedialog
# 读取CSV数据文件
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename(filetypes=[('CSV Files', '*.csv')])
# 读取CSV文件
data = pd.read_csv(file_path, header=0)
# 获取原文件路径、文件名和后缀
file_dir, file_name = os.path.split(file_path)
file_prefix, file_suffix = os.path.splitext(file_name)
required_data = data[['Along-Track (m)', 'Height (m HAE)']]