我有一个labVIEW程序,它读取光谱的波长和强度随时间的变化。我读过这些数据的硬件使用的是ccd芯片,所以有时候会遇到坏像素。程序在文本文件中输出2d强度数组。我想写一个单独的程序来读取这个文件,然后查找并消除坏的像素点。坏像素应该是显而易见的,因为强度比周围的点大10倍。熟悉labVIEW的人都知道,你可以用基本上是C的语言插入一个公式节点和代码。所以我用C和labVIEW标记了这个。
答案 0 :(得分:1)
尝试使用中值或百分位滤镜。既然您不希望实际更改数据,除非它出现在那里,您可以执行以下操作:
for every point, collect *rank* points around it in every direction
compute statistics on the subset of points
if point is an outlier, replace with median value
通过这种方式,您实际上不会替换该点的值,除非它远远超出其中。如果点大于Q3 + 1.5 IQR
或者小于Q1 - 1.5 IQR
,则该点将是异常值。
这是一个VI Snippet执行我所描述的过滤器:
如果您只想更改极端异常值,请增加IQR乘数。