均值濾波
均值濾波,是圖像處理中最常用的手段,從頻率域觀點來看均值濾波是一種低通濾波器,高頻信號將會去掉,因此可以幫助消除圖像尖銳噪聲,實現圖像平滑,模糊等功能。理想的均值濾波是用每個像素和它周圍像素計算出來的平均值替換圖像中每個像素。采樣Kernel數據通常是3X3的矩陣,如下表示:
從左到右從上到下計算圖像中的每個像素,最終得到處理后的圖像。均值濾波可以加上兩個參數,即迭代次數,Kernel數據大小。一個相同的Kernel,但是多次迭代就會效果越來越好。同樣,迭代次數相同,Kernel矩陣越大,均值濾波的效果就越明顯。
function average(imgData, size) { pixelData = tmppixelData = imgData.data, size = size || 3; var count = Math.pow(size, 2); for (var i = 0; i < canvas.height; i++) { for (var j = 0; j < canvas.width; j++) { var totalr = 0, totalg = 0, totalb = 0; 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; totalr += tmppixelData[p * 4 + 0]; totalg += tmppixelData[p * 4 + 1]; totalb += tmppixelData[p * 4 + 2]; } } var p = i * canvas.width + j; var avgr = totalr / count; var avgg = totalg / count; var avgb = totalb / count; pixelData[p * 4 + 0] = avgr; pixelData[p * 4 + 1] = avgg; pixelData[p * 4 + 2] = avgb; } } imgData.data = pixelData; return imgData; }