标签:需要 etl write close one target stat turn 屏幕
高斯模糊,见 百度百科。
也使用卷积来实现,每个卷积元素的公式为:
其中б是标准方差,一般取值为1。
x和y分别对应当前位置到卷积中心的整数距离。
由于需要对高斯核中的权重进行归一化,即使所有权重相加为1,因此e前面的系数实际不会对结果产生任何影响。
综上,公式简化为:
G(x,y) = e-(x*x+y*y)/2
一个5 * 5的高斯核计算代码如下:
1 using System; 2 3 namespace TestShell 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 double[,] r = CalcGaussianBlur(5); 10 for (int i = 0; i < r.GetLongLength(0); i++) 11 { 12 for (int j = 0; j < r.GetLongLength(1); j++) 13 { 14 Console.Write("{0:f4}\t", r[i, j]); 15 } 16 Console.WriteLine(); 17 } 18 Console.ReadKey(); 19 } 20 21 static double[,] CalcGaussianBlur(int size) 22 { 23 double[,] r = new double[size, size]; 24 int center = (int)Math.Floor(size / 2f); 25 double sum = 0; 26 27 for (int i = 0; i < size; i++) 28 { 29 for (int j = 0; j < size; j++) 30 { 31 int x = Math.Abs(i - center); 32 int y = Math.Abs(j - center); 33 double d = CalcItem(x, y); 34 r[i, j] = d; 35 sum += d; 36 } 37 } 38 39 for (int i = 0; i < size; i++) 40 { 41 for (int j = 0; j < size; j++) 42 { 43 r[i, j] /= sum; 44 } 45 } 46 47 return r; 48 } 49 50 static double CalcItem(int x, int y) 51 { 52 return Math.Pow(Math.E, -(x * x + y * y) / 2d); 53 } 54 } 55 }
结果如下:
标签:需要 etl write close one target stat turn 屏幕
原文地址:http://www.cnblogs.com/jietian331/p/7238032.html