中值濾波
中值濾波也是消除圖像噪聲最常見的手段之一,特別是消除椒鹽噪聲,中值濾波的效果要比均值濾波更好。中值濾波是跟均值濾波唯一不同是,不是用均值來替換中心每個像素,而是將周圍像素和中心像素排序以后,取中值,一個3X3大小的中值濾波如下:

//中值濾波
var
medianCounter;
function
median(
imgData,
size) {
if (!
medianCounter)
medianCounter =
0;
pixelData =
tmppixelData =
imgData.
data,
size =
size ||
3;
for (
var
i =
0;
i <
canvas.
height;
i++) {
for (
var
j =
0;
j <
canvas.
width;
j++) {
var
tempR = [],
tempG = [],
tempB = [];
for (
var
dx =
0;
dx <
size;
dx++) {
for (
var
dy =
0;
dy <
size;
dy++) {
var
x =
i +
dx;
var
y =
j +
dy;
var
p =
x *
canvas.
width +
y;
tempR.
push(
tmppixelData[
p *
4 +
0])
tempG.
push(
tmppixelData[
p *
4 +
1])
tempB.
push(
tmppixelData[
p *
4 +
2])
}
}
tempR.
sort();
tempG.
sort();
tempB.
sort();
var
index = ~~((
size *
size) /
2);
var
p =
i *
canvas.
width +
j;
pixelData[
p *
4 +
0] =
tempR[
index];
pixelData[
p *
4 +
1] =
tempG[
index];
pixelData[
p *
4 +
2] =
tempB[
index];
}
}
imgData.
data =
pixelData;
medianCounter++;
//迭代次數
if (
medianCounter ==
1) {
return
imgData;
}
else {
return
median(
imgData,
size)
}
}
