中值滤波

 

 

中值滤波

中值滤波也是消除图像噪声最常见的手段之一,特别是消除椒盐噪声,中值滤波的效果要比均值滤波更好。中值滤波是跟均值滤波唯一不同是,不是用均值来替换中心每个像素,而是将周围像素和中心像素排序以后,取中值,一个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)
}
}
posted @ 2019-05-22 10:32  dnoyeb  阅读(3244)  评论(0编辑  收藏  举报