用Python在Nan中高斯滤波图像
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用Python在Nan中高斯滤波图像,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2417字,纯文字阅读大概需要4分钟。
内容图文
![用Python在Nan中高斯滤波图像](/upload/InfoBanner/zyjiaocheng/705/be0d57de4c4a43f8814c71612cbce597.jpg)
从2D坐标列表和第三个变量(速度),我创建了一个覆盖整个采样区域的2D numpy数组.我的目的是创建一个图像,其中每个像素包含其中的点的平均速度.之后用高斯滤波器过滤该图像.
问题是该区域未被均匀采样.因此,我在图像中间有几个没有信息(像素)的像素.当我尝试通过高斯滤波器对阵列进行滤波时,Nan传播会破坏整个图像.
我需要过滤此图像,但拒绝所有没有信息的像素.换句话说,如果像素不包含信息,则不应将其考虑用于过滤.
以下是我的平均代码示例:
Mean_V = np.zeros([len(x_bins), len(y_bins)])
for i, x_bin in enumerate(x_bins[:-1]):
bin_x = (x > x_bins[i]) & (x <= x_bins[i+1])
for j, y_bin in enumerate(y_bins[:-1]):
bin_xy = (y[bin_x] > y_bins[j]) & (y[bin_x] <= y_bins[j+1])
if (sum(x > 0 for x in bin_xy) > 0) :
Mean_V[i,j]=np.mean(V[bin_x][bin_xy])
else:
Mean_V[i,j]=np.nan
编辑:
网上冲浪我已经结束了我在2013年提出的这个问题.这个问题的解决方案可以在astropy库中找到:
http://docs.astropy.org/en/stable/convolution/
Astropy的卷积用来自邻居的内核加权插值替换NaN像素.
谢谢大家!
解决方法:
用语言:
通过将标准高斯滤波器应用于两个辅助阵列V和W并且通过取两者的比率来获得结果Z,可以容易地获得忽略给定阵列U中的NaN的高斯滤波器.
这里,V是原始U的副本,其中NaNs被零替换,W是一个零的数组,其中零表示原始U中NaN的位置.
想法是用零替换NaN会在滤波后的阵列中引入误差,然而,可以通过将相同的高斯滤波器应用于另一个辅助阵列并将两者合并来补偿.
在Python中:
import numpy as np
import scipy as sp
import scipy.ndimage
U=sp.randn(10,10) # random array...
U[U<2]=np.nan # ...with NaNs for testing
V=U.copy()
V[np.isnan(U)]=0
VV=sp.ndimage.gaussian_filter(V,sigma=2.0)
W=0*U.copy()+1
W[np.isnan(U)]=0
WW=sp.ndimage.gaussian_filter(W,sigma=2.0)
Z=VV/WW
数量:
为了演示目的,高斯滤波器的系数设置为[0.25,0.50,0.25],它们总和为一个0.25 0.50 0.25 = 1,而不失一般性.
在用零替换NaN并应用高斯滤波器(参见下面的VV)之后,很明显零会引入误差,即,由于“丢失”数据,系数0.25 0.50 = 0.75不再总和为1并且因此低估了“真实”的价值.
然而,这可以通过使用第二辅助阵列来补偿(参见下面的WW),其在用相同的高斯滤波之后仅包含系数的总和.
因此,划分两个滤波的辅助阵列重新调整系数,使得它们总和为1,同时忽略NaN位置.
array U 1 2 NaN 1 2
auxiliary V 1 2 0 1 2
auxiliary W 1 1 0 1 1
position a b c d e
filtered VV_b = 0.25*V_a + 0.50*V_b + 0.25*V_c
= 0.25*1 + 0.50*2 + 0
= 1.25
filtered WW_b = 0.25*W_a + 0.50*W_b + 0.25*W_c
= 0.25*1 + 0.50*1 + 0
= 0.75
ratio Z = VV_b / WW_b
= (0.25*1 + 0.50*2) / (0.25*1 + 0.50*1)
= 0.333*1 + 0.666*2
= 1.666
内容总结
以上是互联网集市为您收集整理的用Python在Nan中高斯滤波图像全部内容,希望文章能够帮你解决用Python在Nan中高斯滤波图像所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。