如果你有一簇坏点,你目前的做法不会对你有所帮助。它也可以将卡住的像素(具有100%强度的像素)误解为有效像素,并且将周围像素视为缺陷,这取决于用于测试画面的图像。
而是计算您的数据的整体平均值μ和方差σ并将数据解释为normal distributed。根据68-95-99.7 rule 95%的数据应该在[μ-2σ,μ+2σ]区间内。
让我们来看看你的样品,并确定这是否为您的数据真实:
var arr = "5000 3176 3207 3183 3212 3211 3197 3198 3183 3191 3193 3177 1135 3185 3176 3175 3184 3188 3179 3181 3181 3165 3184 3187 3183".split(" ");
var i = 0;
var avg = 0; // average/mean
var vri = 0; // variance
var sigma; // sqrt(vri)
for(i = 0; i < arr.length; ++i){
arr[i] = parseInt(arr[i]);
avg += arr[i];
}
avg /= arr.length;
for(i = 0; i < arr.length; ++i){
vri += (arr[i]-avg)*(arr[i]-avg);
}
vri /= (arr.length - 1);
sigma = Math.sqrt(vri);
for(i = 0; i < arr.length; ++i){
if(Math.abs(arr[i]-avg) > 2*sigma)
console.log("entry "+i+" with value "+arr[i]+" probably dead");
}
这将导致坏点(总像素的8%)显示。请注意,我还添加了一个像素具有非常高的强度,这可能是卡住:
entry 0 with value 5000 propably dead
entry 12 with value 1135 probably dead
然而,有一个主要的缺点,因为如果屏幕亮度相同这种方法才有效。如果您使用普通白色图像记录强度图,也无法检测到卡住的像素。当然,如果你的数据因为屏幕完全被破坏而分散,这种方法不会对你有所帮助。除此之外,它很容易实现。您也可以添加本地检查以过滤误报。
请注意,该算法的固定运行时间为3*n
。
(该diagram已被Mwtoews创建)
@Jay:“[...]检测并计算强度图中的坏点。”我想他有必要的数据。他如何得到它,是否正确还有另一个问题,但是你也可以把这个问题解释为“如何得到值低于当地平均值的区域”。 – Zeta 2012-07-30 07:37:37
@Jay:你可能在想像显示器像素;我认为OP在考虑传感器像素(数码相机等) – 2012-07-30 08:18:25