Win8 Metro(C#)数字图像处理--2.71Sigma平滑滤波器
来源:互联网 发布:中国社会统计数据库 编辑:程序博客网 时间:2024/05/17 09:10
[算法说明]
Sigma平滑滤波器是构造一个模板,比如3*3大小的模板,计算这个模板对应的像素的标准差d,然后根据统计学原理,得到一个置信区间v,假设3*3模板中心像素为p,则v大小范围为[p-d,p+d]。
我们判断3*3模板中对应像素是否落在置信区间v内,对于在v内的像素,我们求取他们的均值,然后,当前模板对应的中心像素的滤波值就等于这个均值。
图像表示如下:
/// <summary> /// Sigma filter. /// </summary> /// <param name="src">The source image.</param> /// <returns></returns> public static WriteableBitmap SigmaFilterProcess(WriteableBitmap src)////Sigma滤波器 { if (src != null) { int w = src.PixelWidth; int h = src.PixelHeight; WriteableBitmap filterImage = new WriteableBitmap(w, h); byte[] temp = src.PixelBuffer.ToArray(); byte[] tempMask = (byte[])temp.Clone(); double[] Gray = new double[9]; double variance = 0; int count = 0; for (int j = 1; j < h - 1; j++) { for (int i = 1; i < w - 1; i++) { variance = 0; count = 0; int[] B = new int[9] { tempMask[i * 4 + j * w * 4], tempMask[(i - 1) * 4 + (j - 1) * w * 4], tempMask[i * 4 + (j - 1) * w * 4], tempMask[(i + 1) * 4 + (j - 1) * w * 4], tempMask[(i - 1) * 4 + j * w * 4], tempMask[(i + 1) * 4 + j * w * 4], tempMask[(i - 1) * 4 + (j + 1) * w * 4], tempMask[i * 4 + (j + 1) * w * 4], tempMask[(i + 1) * 4 + (j + 1) * w * 4] }; int[] G = new int[9] { tempMask[i * 4 + 1 + j * w * 4], tempMask[(i - 1) * 4 + 1 + (j - 1) * w * 4], tempMask[i * 4 + 1 + (j - 1) * w * 4], tempMask[(i + 1) * 4 + 1 + (j - 1) * w * 4], tempMask[(i - 1) * 4 + 1 + j * w * 4], tempMask[(i + 1) * 4 + 1 + j * w * 4], tempMask[(i - 1) * 4 + 1 + (j + 1) * w * 4], tempMask[i * 4 + 1 + (j + 1) * w * 4], tempMask[(i + 1) * 4 + 1 + (j + 1) * w * 4] }; int[] R = new int[9] { tempMask[i * 4 + 2 + j * w * 4], tempMask[(i - 1) * 4 + 2 + (j - 1) * w * 4], tempMask[i * 4 + 2 + (j - 1) * w * 4], tempMask[(i + 1) * 4 + 2 + (j - 1) * w * 4], tempMask[(i - 1) * 4 + 2 + j * w * 4], tempMask[(i + 1) * 4 + 2 + j * w * 4], tempMask[(i - 1) * 4 + 2 + (j + 1) * w * 4], tempMask[i * 4 + 2 + (j + 1) * w * 4], tempMask[(i + 1) * 4 + 2 + (j + 1) * w * 4] }; for (int n = 0; n < 9; n++) { Gray[n] = (double)B[n] * 0.114 + (double)G[n] * 0.587 + (double)R[n] * 0.299; } for (int m = 0; m < 9; m++) { variance += ((double)Gray[m] - Gray.Average()) * ((double)Gray[m] - Gray.Average()) / 9; } variance = Math.Sqrt(variance); for (int m = 0; m < 9; m++) { if (Gray[m] < Gray[0]-variance && Gray[m] > variance + Gray[0]) { R[m] = 0; G[m] = 0; B[m] = 0; } else count++; } temp[i * 4 + j * w * 4] = (byte)(B.Sum() / count); temp[i * 4 + 1 + j * w * 4] = (byte)(G.Sum() /count); temp[i * 4 + 2 + j * w * 4] = (byte)(R.Sum() / count); } } Stream sTemp = filterImage.PixelBuffer.AsStream(); sTemp.Seek(0, SeekOrigin.Begin); sTemp.Write(temp, 0, w * 4 * h); return filterImage; } else { return null; } }
最后,分享一个专业的图像处理网站(微像素),里面有很多源代码下载:
http://www.zealpixel.com/portal.php
0 0
- Win8 Metro(C#)数字图像处理--2.71Sigma平滑滤波器
- Win8 Metro(C#)数字图像处理--2.67图像最大值滤波器
- Win8 Metro(C#)数字图像处理--2.68图像最小值滤波器
- Win8 Metro(C#)数字图像处理--2.69中点滤波器
- Win8 Metro(C#)数字图像处理--2.70修正后的阿尔法滤波器
- 数字图像处理---平滑空间滤波器
- Win8 Metro(C#) 数字图像处理--1 图像打开,保存
- Win8 Metro(C#)数字图像处理--2.35图像肤色检测算法
- Win8 Metro(C#)数字图像处理--2.36角点检测算法
- Win8 Metro(C#)数字图像处理--2.37Wallis图象锐化
- Win8 Metro(C#)数字图像处理--2.38Hough变换直线检测
- Win8 Metro(C#)数字图像处理--2.39二值图像投影
- Win8 Metro(C#)数字图像处理--2.42图像光照效果算法
- Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法
- Win8 Metro(C#)数字图像处理--2.44图像油画效果算法
- Win8 Metro(C#)数字图像处理--2.45图像雾化效果算法
- Win8 Metro(C#)数字图像处理--2.48Canny边缘检测算法
- Win8 Metro(C#)数字图像处理--2.50图像运动模糊
- 7
- word
- apache虚拟主机配置.htaccess
- iOS 笔记之 RunTime
- 自动跳转不被搜索引擎察觉的2种方法
- Win8 Metro(C#)数字图像处理--2.71Sigma平滑滤波器
- sublime打开包含中文的文件乱码
- 和自己赛跑的人
- Windows核心编程 进程--CreateProcess函数 终止进程和子进程 进程的权限
- 黑马程序员----[20140427][面向对象2]
- linux网络设备—PHY
- 人性化,中国制造新境界
- Windows Phone 后台任务的执行
- 【框架-MFC】MFC 应用程序 AfxGetMainWnd();在子线程中返回null