【问题标题】:detect high values from numpy array从 numpy 数组中检测高值
【发布时间】:2014-06-21 14:23:12
【问题描述】:

我正在研究一种检测算法,用于检测雷达图像上的风暴单元。 我在底图上绘制的二维 numpy 数组中有雷达数据。 我们得到了 azymuth 和 rangebins 数据,我们将它们放入带有纬度/经度坐标的极坐标网格中。

我们的 numpy 数组中的值基于 dBZ 高度,范围从零到最大值 80。

这是我们名为 data 的 numpy 数组的打印输出:

[[-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 之类的东西?

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 我想你忘了问一个问题 - 你到底需要什么帮助?
  • 抱歉,我想检测值高于 20dbz 的集群,并在最终产品图像上围绕它们制作一个彩色方块。检测到的集群应该得到一个 ID 或者我们以后可以用它做其他事情的东西,比如细胞运动的跟踪和速度。谢谢!
  • 您可以使用masked array 跟踪特定的单元格,这会为它们提供一种ID。我不确定这是否适合您的情况以及您用于绘图的工具是什么。
  • 谢谢,我们使用 wradlib 处理原始雷达数据。

标签: python arrays numpy


【解决方案1】:

如果你可以使用 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

【讨论】:

  • 感谢 Jaime,我收到了这样的回复:ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
  • scipy.ndimage.label 返回两个值,带有标签的数组和它找到的标签数量,这可能是让你绊倒的原因,我更正了上面的代码。您可以使用num_labels 预先知道该算法发现了多少不同的风暴。
  • 谢谢,这行得通,但我无法在现有图形上绘制矩形。我曾尝试使用此代码: # 绘制矩形 someX, someY = 0.5, 0.5 fig,ax = plt.subplots() currentAxis = plt.gca() currentAxis.add_patch(Rectangle((someX - .1, someY - .1 ), 0.2, 0.2, alpha=1, facecolor='none'))
猜你喜欢
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
相关资源
最近更新 更多