博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Win8 Metro(C#)数字图像处理--2.51图像统计滤波算法
阅读量:6589 次
发布时间:2019-06-24

本文共 4282 字,大约阅读时间需要 14 分钟。

原文:



[函数名称]

  图像统计滤波   WriteableBitmap StatisticalFilter(WriteableBitmap src,double T)

///         /// Statistical filtering process.        ///         /// The source image.        /// The threshould to adjust filter effect.        /// 
public static WriteableBitmap StatisticalFilter(WriteableBitmap src,double T)图像统计滤波 { if (src != null) { int w = src.PixelWidth; int h = src.PixelHeight; WriteableBitmap srcImage = new WriteableBitmap(w, h); byte[] temp = src.PixelBuffer.ToArray(); byte[] tempMask = (byte[])temp.Clone(); double mean = 0; double std = 0; int[] windowValue = new int[9]; double mR = 0; double mG = 0; double mB = 0; for (int j = 1; j < h-1; j++) { for (int i = 1; i < w-1; i++) { windowValue[0] = (int)(tempMask[(i - 1) * 4 + (j - 1) * w * 4] * 0.114 + tempMask[(i - 1) * 4 + 1 + (j - 1) * w * 4] * 0.587 + tempMask[(i - 1) * 4 + 2 + (j - 1) * w * 4] * 0.299); windowValue[1] = (int)(tempMask[i * 4 + (j - 1) * w * 4] * 0.114 + tempMask[i * 4 + 1 + (j - 1) * w * 4] * 0.587 + tempMask[i * 4 + 2 + (j - 1) * w * 4] * 0.299); windowValue[2] = (int)(tempMask[(i + 1) * 4 + (j - 1) * w * 4] * 0.114 + tempMask[(i + 1) * 4 + 1 + (j - 1) * w * 4] * 0.587 + tempMask[(i + 1) * 4 + 2 + (j - 1) * w * 4] * 0.299); windowValue[3] = (int)(tempMask[(i-1) * 4 + j * w * 4] * 0.114 + tempMask[(i-1) * 4 + 1 + j * w * 4] * 0.587 + tempMask[(i - 1) * 4 + 2 + j * w * 4] * 0.299); windowValue[4] = (int)(tempMask[i * 4 + j * w * 4] * 0.114 + tempMask[i * 4 + 1 + j * w * 4] * 0.587 + tempMask[i * 4 + 2 + j * w * 4] * 0.299); windowValue[5] = (int)(tempMask[(i + 1) * 4 + j * w * 4] * 0.114 + tempMask[(i + 1) * 4 + 1 + j * w * 4] * 0.587 + tempMask[(i + 1) * 4 + 2 + j * w * 4] * 0.299); windowValue[6] = (int)(tempMask[(i - 1) * 4 + (j + 1) * w * 4] * 0.114 + tempMask[(i - 1) * 4 + 1 + (j + 1) * w * 4] * 0.587 + tempMask[(i - 1) * 4 + 2 + (j + 1) * w * 4] * 0.299); windowValue[7] = (int)(tempMask[i * 4 + (j + 1) * w * 4] * 0.114 + tempMask[i * 4 + 1 + (j + 1) * w * 4] * 0.587 + tempMask[i * 4 + 2 + (j + 1) * w * 4] * 0.299); windowValue[8] = (int)(tempMask[(i + 1) * 4 + (j + 1) * w * 4] * 0.114 + tempMask[(i + 1) * 4 + 1 + (j + 1) * w * 4] * 0.587 + tempMask[(i + 1) * 4 + 2 + (j + 1) * w * 4] * 0.299); for (int n = 0; n < 9; n++) { mean += (double)((double)(windowValue[n]) / 9); } for (int n = 0; n < 9; n++) { std += Math.Pow((double)(windowValue[n]) - mean, 2)/9; } if (windowValue[4] >= T * Math.Sqrt(std)) { for (int k = -1; k < 2; k++) { for (int m = -1; m < 2; m++) { mB += (double)tempMask[(i + m) * 4 + (j + k) * w * 4] / 9; mG += (double)tempMask[(i + m) * 4 + 1 + (j + k) * w * 4] / 9; mR += (double)tempMask[(i + m) * 4 + 2 + (j + k) * w * 4] / 9; } } temp[i * 4 + j * w * 4] = (byte)mB; temp[i * 4 + 1 + j * w * 4] = (byte)mG; temp[i * 4 + 2 + j * w * 4] = (byte)mR; } mean = 0; std = 0; mR = mG = mB = 0; } } Stream sTemp = srcImage.PixelBuffer.AsStream(); sTemp.Seek(0, SeekOrigin.Begin); sTemp.Write(temp, 0, w * 4 * h); return srcImage; } else { return null; } }

你可能感兴趣的文章
《Arduino开发实战指南:机器人卷》一2.2 模拟I/O口的操作函数
查看>>
红帽专家谈 Ceph 与 Gluster 开源存储路线
查看>>
2015 上半年 JavaScript 使用统计数据
查看>>
《PaaS程序设计》一1.2 云能为创新做什么
查看>>
《OpenGL ES 3.x游戏开发(上卷)》一2.4 文件I/O
查看>>
《写给程序员的数据挖掘实践指南》——5.2. 10折交叉验证的例子
查看>>
DevOps:软件架构师行动指南2.2 云的特性
查看>>
JVM性能优化, Part 5:Java的伸缩性
查看>>
《Python算法教程》——1.6 如果您感兴趣
查看>>
《正则表达式经典实例(第2版)》——2.18 向正则表达式中添加注释
查看>>
lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具
查看>>
ROS机器人程序设计(原书第2版)3.9 3D可视化
查看>>
干货 | 豆子科技首席架构师钟声:Java的纯真年代
查看>>
《数字图像处理与机器视觉——Visual C++与Matlab实现》——0.2 数字图像处理与识别...
查看>>
《移动App测试的22条军规》—App测试综合案例分析23.11节测试微信App对多语言和地区的支持...
查看>>
[译]深入 NGINX: 为性能和扩展所做之设计
查看>>
如何使用 GRUB 2 直接从硬盘运行 ISO 文件
查看>>
《数据整理实践指南》一第2章 是我的问题还是数据的问题
查看>>
Storm-源码分析-Topology Submit-Client
查看>>
深度解析Java8 – AbstractQueuedSynchronizer的实现分析(下)
查看>>