我正在研究一种探测算法,用于探测雷达图像上的风暴单体。我有二维numpy数组的雷达数据,我们把它们绘制在底图上。我们得到了奇异度和距离的数据,我们把它们放入了一个极格中,带有经纬度坐标。
我们的numpy数组中的值是基于dBZ高度的,范围从0到最大80。
下面是我们的numpy数组data的输出:
[[-31.5 -31.5 16.5 ..., -31.5 -31.5 -31.5]
[-31.5 -31.5 -31.5 ..., -31.5 -31.5 -31.5]
[-31.5 -31.5 -31.5 ..., -31.5 -31.5 -31.5]
...,
[-31.5 -31.5 -31.5 ..., -31.5 -31.5 -31.5]
[-31.5 -31.5 -31.5 ..., -31.5 -31.5 -31.5]
[-31.5 11.5 -31.5 ..., -31.5 -31.5 -31.5]]
而-31.5表示空值或隐藏值。我们只需要正数。即使小数也没有意义。
那么我们要做什么呢:
检测高值的集群,并使它们在该单元格周围成为一个红色正方形。我已经尝试了一些图像蒙版,但我被困在那里。我甚至不知道一个图像蒙版是否是一个很好的解决方案。
下面是我处理数据的代码。
gain = 0.5
offset = -31.5
az = np.arange(0.,360.,360./scan["scan_number_azim"])
r = np.arange(scan["scan_start_azim"], (scan["scan_start_azim"] + scan["scan_number_range"] * rscale), rscale)
data = gain * raw["scan2/scan_Z_data"] + offset
所以检测到的计数会经常波动。也许我也需要像DBscan这样的东西?
有人能帮我一下吗?
如果你能使用scipy,我想像这样的东西会起作用:
import scipy.ndimage
mask = data > 20
labels, num_labels = scipy.ndimage.label(mask)
custers = scipy.ndimage.find_objects(labels)
clusters
现在将是切片元组的列表,您可以获得矩形的开始和结束行和列:
for row_slice, col_slice in clusters:
start_row = row_slice.start
end_row = row_slice.stop
start_col = col_slice.start
end_col = col_slice.stop
# draw your rectangle