Win8Metro(C#)数字图像处理--2.10图像中值滤波
原文:Win8Metro(C#)数字图像处理--2.10图像中值滤波
[函数名称]
图像中值滤波函数MedianFilterProcess(WriteableBitmap
src)
[函数代码]
///<summary>
///
Median filter process.
///</summary>
///<param
name="src">Source image.</param>
///<returns></returns>
publicstaticWriteableBitmap
MedianFilterProcess(WriteableBitmap src)////10中值滤波处理
{
if(src!=null
)
{
int
w = src.PixelWidth;
int
h = src.PixelHeight;
WriteableBitmap
filterImage =newWriteableBitmap(w,
h);
byte[]
temp = src.PixelBuffer.ToArray();
byte[]
tempMask = (byte[])temp.Clone();
int
v1 = 0, v2 = 0, v3 = 0, v4 = 0, v5 = 0, v6 = 0, v7 = 0, v8 = 0, t = 0;
for
(int j = 1; j < h - 1; j++)
{
for
(int i = 4; i < w * 4 - 4; i += 4)
{
v1 = (int)(temp[i
- 4 + (j - 1) * w * 4] * 0.114 + temp[i - 4 + 1 + (j - 1) * w * 4] * 0.587 + temp[i - 4 + 2 + (j - 1) * w * 4] * 0.299);
v2 = (int)(temp[i
+ (j - 1) * w * 4] * 0.114 + temp[i + 1 + (j - 1) * w * 4] * 0.587 + temp[i + 2 + (j - 1) * w * 4] * 0.299);
v3 = (int)(temp[i
+ 4 + (j - 1) * w * 4] * 0.114 + temp[i + 4 + 1 + (j - 1) * w * 4] * 0.587 + temp[i + 4 + 2 + (j - 1) * w * 4] * 0.299);
v4 = (int)(temp[i
- 4 + j * w * 4] * 0.114 + temp[i - 4 + 1 + j * w * 4] * 0.587 + temp[i - 4 + 2 + j * w * 4] * 0.299);
v5 = (int)(temp[i
+ 4 + j * w * 4] * 0.114 + temp[i + 4 + 1 + j * w * 4] * 0.587 + temp[i + 4 + 2 + j * w * 4] * 0.299);
v6 = (int)(temp[i
- 4 + (j + 1) * w * 4] * 0.114 + temp[i - 4 + 1 + (j + 1) *w * 4] * 0.587 + temp[i - 4 + 2 + (j + 1) * w * 4] * 0.299);
v7 = (int)(temp[i
+ (j + 1) * w * 4] * 0.114 + temp[i + 1 + (j + 1) * w * 4] * 0.587 + temp[i + 2 + (j + 1) * w * 4] * 0.299);
v8 = (int)(temp[i
+ 4 + (j + 1) * w * 4] * 0.114 + temp[i + 4 + 1 + (j + 1) * w * 4] * 0.587 + temp[i + 4 + 2 + (j + 1) * w * 4] * 0.299);
t = GetMedianValue(v1, v2, v3, v4, v5, v6, v7, v8);
if(t==v1)
{
temp[i + j * w * 4] = (byte)tempMask[i
- 4 + (j - 1) * w * 4];
temp[i + 1 + j * w * 4] = (byte)tempMask[i
- 4 + 1 + (j - 1) * w * 4];
temp[i + 2 + j * w* 4] = (byte)tempMask[i
- 4 + 2 + (j - 1) * w * 4];
}
elseif(t==v2)
{
temp[i + j * w * 4] = (byte)tempMask[i
+ (j - 1) * w * 4];
temp[i + 1 + j * w * 4] = (byte)tempMask[i
+ 1 + (j - 1) * w * 4];
temp[i + 2 + j * w * 4] = (byte)tempMask[i
+ 2 + (j - 1) * w * 4];
}
elseif(t==v3)
{
temp[i + j * w * 4] = (byte)tempMask[i
+ 4 + (j - 1) * w * 4];
temp[i + 1 + j * w * 4] = (byte)tempMask[i
+ 1 + 4 + (j - 1) * w * 4];
temp[i + 2 + j * w * 4] = (byte)tempMask[i
+ 2 + 4 + (j - 1) * w * 4];
}
elseif(t==v4)
{
temp[i + j * w * 4] = (byte)tempMask[i
- 4 + j * w * 4];
temp[i + 1 + j * w * 4] = (byte)tempMask[i
- 4 + 1 + j * w * 4];
temp[i + 2 + j * w * 4] = (byte)tempMask[i
- 4 + 2 + j * w * 4];
}
elseif(t==v5)
{
temp[i + j * w * 4] = (byte)tempMask[i
+ 4 + j * w * 4];
temp[i + 1 + j * w * 4] = (byte)tempMask[i
+ 4 + 1 + j * w * 4];
temp[i + 2 + j * w * 4] = (byte)tempMask[i
+ 4 + 2 + j * w * 4];
}
elseif(t==v6)
{
temp[i + j * w * 4] = (byte)tempMask[i
- 4 + (j + 1) * w * 4];
temp[i + 1 + j * w * 4] = (byte)tempMask[i
- 4 + 1 + (j + 1) * w * 4];
temp[i + 2 + j * w * 4] = (byte)tempMask[i
- 4 + 2 + (j + 1) * w * 4];
}
elseif
(t == v7)
{
temp[i + j * w * 4] = (byte)tempMask[i
+ (j + 1) * w * 4];
temp[i + 1 + j * w * 4] = (byte)tempMask[i
+ 1 + (j + 1) * w * 4];
temp[i + 2 + j * w * 4] = (byte)tempMask[i
+ 2 + (j + 1) * w * 4];
}
else
{
temp[i + j * w * 4] = (byte)tempMask[i
+ 4 + (j + 1) * w * 4];
temp[i + 1 + j * w * 4] = (byte)tempMask[i
+ 4 + 1 + (j + 1) * w * 4];
temp[i + 2 + j * w * 4] = (byte)tempMask[i
+ 4 + 2 + (j + 1) * w * 4];
}
v1 = 0; v2 = 0; v3 = 0; v4 = 0; v5 = 0; v6 = 0; v7 = 0; v8 = 0; t = 0;
}
}
Stream
sTemp = filterImage.PixelBuffer.AsStream();
sTemp.Seek(0,SeekOrigin.Begin);
sTemp.Write(temp, 0, w * 4 * h);
return
filterImage;
}
else
{
returnnull;
}
}
privatestaticint
GetMedianValue(paramsint[]
src)
{
int
w = src.Length;
int
temp = src[0], m = 0;
for
(int i = 1; i < (int)(w
/ 2); i++)
{
if
(src[i] < temp)
{
m = src[i];
src[i] = temp;
temp = m;
}
else
continue;
}
return
(int)((src[(int)(w
/ 2)] + src[(int)(-1 + w / 2)]) / 2);
}
Win8Metro(C#)数字图像处理--2.10图像中值滤波的更多相关文章
- Win8Metro(C#)数字图像处理--2.3图像反色
原文:Win8Metro(C#)数字图像处理--2.3图像反色 [函数名称] 图像反色函数ContraryProcess(WriteableBitmap src) [算法说明] 反色公式如下: ...
- Win8MetroC#数字图像处理--2.2图像二值化函数
原文:Win8MetroC#数字图像处理--2.2图像二值化函数 [函数代码] /// <summary> /// Binary process. /// </summary> ...
- Win8Metro(C#)数字图像处理--2.4图像颜色聚类
原文:Win8Metro(C#)数字图像处理--2.4图像颜色聚类 [函数名称] 图像颜色聚类函数ClusterProcess(WriteableBitmap src,int value) [算 ...
- Win8Metro(C#)数字图像处理--2.33图像非线性变换
原文:Win8Metro(C#)数字图像处理--2.33图像非线性变换 [函数名称] 图像非线性变换函数NonlinearTransformProcess(WriteableBitmap src ...
- Win8Metro(C#)数字图像处理--2.32图像曝光算法
原文:Win8Metro(C#)数字图像处理--2.32图像曝光算法 [函数名称] 图像曝光函数ExposureProcess(WriteableBitmap src,int exposureV ...
- Win8Metro(C#)数字图像处理--2.27图像加法运算
原文:Win8Metro(C#)数字图像处理--2.27图像加法运算 [函数名称] 图像加法函数AddProcess(WriteableBitmap src, WriteableBitmap a ...
- Win8Metro(C#)数字图像处理--2.28图像乘法运算
原文:Win8Metro(C#)数字图像处理--2.28图像乘法运算 [函数名称] 图像乘法函数MultiplicationProcess(WriteableBitmap src, Writea ...
- Win8Metro(C#)数字图像处理--2.29图像除法运算
原文:Win8Metro(C#)数字图像处理--2.29图像除法运算 [函数名称] 图像除法函数DivisionProcess(WriteableBitmap src, WriteableBit ...
- Win8Metro(C#)数字图像处理--2.26图像减法
原文:Win8Metro(C#)数字图像处理--2.26图像减法 [函数名称] 图像减法函数SubtractionProcess(WriteableBitmap src, WriteableBi ...
随机推荐
- swift菜鸟入门视频教程-01-基础部分
本人自己录制的swift菜鸟入门,欢迎大家拍砖,有什么问题能够在这里留言. 主要内容: 常量和变量 凝视 分号 整数 浮点数 类型安全和类型判断 数值型字面量 数值型类型转换 类型别名 布尔值 元组 ...
- #781 – 多个变换执行的顺序问题(Transform Order Matters)
原文:#781 – 多个变换执行的顺序问题(Transform Order Matters) 原文地址: https://wpf.2000things.com/2013/03/21/781-tr ...
- NVIDIA 显卡信息(CUDA信息的查看)
1. nvidia-smi 查看显卡信息 nvidia-smi 指的是 NVIDIA System Management Interface: 在安装完成 NVIDIA 显卡驱动之后,对于 windo ...
- 在这里23种经典设计模式UML类图汇总
创建型模式 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说"来四个鸡翅"就 ...
- SSH原理和使用
ssh 是什么 在 linux 上工作,ssh 是必须要了解的技术方法.它可以建立起多台主机之间的安全的加密传输,以进行远程的访问.操控.传输数据. SSH 為 Secure Shell 的縮寫.為建 ...
- Android--数据持久化存储概述
Android数据持久化存储共有四种方式,分别是文件存储.SharedPreferences.Sqlite数据库和ContentProvider.在本篇幅中只介绍前面三种存储方式,因为ContentP ...
- 今天用pro安装nginx+php+mysql出现故障的解决方法
今天用pro安装nginx+php+mysql出现故障的解决方法 by 伍雪颖 dyld: Library not loaded: @@HOMEBREW_CELLAR@@/openssl/1.0.1h ...
- virtualbox下ubuntu共享文件夹自动挂载
1.若想删除挂载,可执行命令 umount -f /mnt/share 2.若想开机自动挂载,可以在 /etc/fstab 文件末添加一项 sharing /mnt/share vboxsf ...
- Windows 10 子系统Linux重启(不重启Win10)
Using CMD (Administrator) net stop LxssManager net start LxssManager
- 编译wxWidgets —— windows、vc71、bcc32、MinGW与命令行
编译wxWidgets —— windows.vc71.bcc32.MinGW与命令行 http://www.diybl.com/course/3_program/vc/vc_js/20071226/ ...