问题描述
我想对二维数组应用一些图像过滤器,但我希望过滤器忽略某个值,例如 0,因为它代表 Nan
。为简单起见,这是我的数组之一:
array([[ 0.,0.,4.,19.,7.,9.,6.],[ 0.,3.,13.,1.,16.,17.,17.],2.,12.,8.,15.,4.],11.,10.,18.],6.,5.,8.],[17.,14.,[ 9.,18.,10.],[18.,4.]])
形状 = 8,9。
这是我想对非零值应用的过滤器:
def lee_filter(img,size):
img_mean = uniform_filter(img,(size,size))
img_sqr_mean = uniform_filter(img**2,size)) #from scipy.ndimage.filters
img_variance = img_sqr_mean - img_mean**2
overall_variance = variance(img) #from scipy.ndimage.measurements
img_weights = img_variance / (img_variance + overall_variance)
img_output = img_mean + img_weights * (img - img_mean)
return img_output
uniform_filter(img,size)) #size=3
y = np.ma.masked_where(img== 0,img)
>>> masked_array(
data=[[--,--,4.0,19.0,7.0,9.0,6.0],[--,3.0,13.0,1.0,16.0,17.0,17.0],2.0,12.0,8.0,15.0,4.0],11.0,10.0,18.0],6.0,5.0,8.0],[17.0,14.0,[9.0,18.0,10.0],[18.0,4.0]],mask=[[ True,True,False,False],[ True,[False,False]],fill_value=1e+20)
当我申请时:
uniform_filter(y,(3,3))
我得到了与申请相同的结果:
uniform_filter(img,3))
>>>array([[ 2.11111111,2.44444444,3.88888889,2.77777778,8.44444444,10.66666667,13.55555556,10.77777778,10.33333333],[ 2.33333333,5.66666667,5.33333333,10.44444444,11.22222222,10.55555556],[ 4.11111111,9.77777778,8.33333333,8.88888889,9.88888889,11.55555556,12.44444444,13. ],[ 2.66666667,5.44444444,7.66666667,10.11111111,9.66666667],[ 7.,7.22222222,7.55555556,7.77777778,10.33333333,12.66666667],[ 7.66666667,6.55555556,8.22222222,8.55555556,11.88888889,12.55555556,11.33333333],[11.,8.77777778,4.77777778,6.11111111,7.44444444,10.55555556,12.11111111,11. ],[10.44444444,3.11111111,4.55555556,6.88888889,9.66666667,7.44444444]])
我想忽略零,以便返回的数组将有零,其中零位于首位,并且所有计算都应仅应用于非零值
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)