簡體   English   中英

在python np.array中對連續值進行分組

[英]grouping consecutive values in python np.array

我有一個數組(500 * 490),長有數據。 它實際上是來自雷達的原始數據。 我計划創建某種跟蹤,根據陣雨和雷暴在數組中的值來查找陣雨和雷暴。 取值范圍是0到75。

為了找到基於閾值的陣雨和雷暴,我從原始的h5圖像創建了一個數組,使用h5py讀取文件,然后從中創建一個數組。

import numpy as np
from numpy import inf
import pylab as pl
import math
import h5py
import scipy
import scipy.spatial

np.set_printoptions(threshold=10)

# read data
# *********
print "Reading & converting data data (mm/u - dbz)"
f = h5py.File('test.h5','r')
data = f.get('image1/image_data')
data_as_array = np.array(data)
datadbz = 20 * np.ma.log10(data_as_array)
print "*** Data read & converted"
print "raw array data = 'data_as_array'"
print "dbz array data = 'datadbz'"
print ""

# print raw data
# **************
print "Array from h5-file"
print "******************"
print data_as_array
print "*"
print ""

datadbz[datadbz == -inf] = 0
datadbz[datadbz == 96.32946777] = 0
datadbz[datadbz < 40] = 0

print "Array in dbz"
print "************"
print datadbz
print ""

# > 40 dbz
pixelarray = np.array(zip(*np.where(datadbz > 40)))
print "Array wich cores (> 40 dbz)"
print "***************************"
print pixelarray
print "*"
print ""

# > 55 dbz
hailarray = np.array(zip(*np.where(datadbz > 55)))
print "Array with cores (> 55 dbz)"
print "***************************"
print hailarray
print "*"
print ""

我需要使用的2個數組是數組“ pixelarray”,它看起來像python shell中的以下代碼片段

Array wich cores (> 40 dbz)
***************************
[[  5 106]
 [  5 107]
 [  6 105]
 ..., 
 [440 270]
 [440 271]
 [489 151]]
*

另一個是“ hailarray”,在python shell中看起來像這樣

Array with cores (> 55 dbz)
***************************
[[  7 104]
 [  8 103]
 [ 27 194]
 ..., 
 [433 272]
 [435 272]
 [438 271]]
*

我遇到的問題是...

如果這是有問題的雷達圖像:

雷達圖像

該數組包含雜波,應將其丟棄並忽略。 這些是圖像上的小斑點和點。 但是,我需要的是暴風雨/陣雨。

為此,我需要弄清楚如何將雜波(隨機斑點(數組中的值))與圖像中的實際回聲(數組中的數據范圍)區分開來

由於我使用的數組看起來像這樣,所以每個值的二重奏分別代表檢測的x像素和y像素

[[  5 106]
 [  5 107]
 [  6 105]
 ..., 
 [440 270]
 [440 271]
 [489 151]]
*

我正在考慮將pixelranges分組在一起。 我知道有可能在數組中使用“連續值”並將它們分組在一起,但是我還沒有找到正確執行此方法的方法,因為我的數組看起來更像某種矩陣。

由於我不是python專家,因此我想向正確的方向指出如何解決這個問題。 一旦完成此操作,這就是“僅”一個問題,即找出哪些組的維數大於某個閾值,這樣我就可以擺脫雜亂的斑點,而只剩下暴風雨了。

然后,我可以將這些較大的組的中心用作風暴的中心,並完成跟蹤。

因此,如果有人可以幫助我在檢測陣列中設置連續像素范圍的搜索功能,我將永遠感激不已,因為我無法忍受嘗試在這里發明輪子的感覺。

如果您有足夠的內存,則可以構建圖像的密集表示,並使用數組在此處設置相應的像素。 然后,您可以在圖像上使用腐蝕濾鏡以消除噪聲(例如SciPy的binary_erosion

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM