如果你有一簇壞點,你目前的做法不會對你有所幫助。它也可以將卡住的像素(具有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