灰度图像的腐蚀算法和细化算法(C#代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
灰度图像的腐蚀算法和细化算法(C#代码)
最近做一些图像处理,需要将图像中的一些像素过滤一下,有网友给提了个名词:腐蚀算法。
我不是学图像学的,乍一听,觉得很神奇。后来从网上收集了一些VC代码,研究了一下,发
现其它也就是那么回事。尤其是腐蚀算法,我在以前的验证码图片去噪声的文章中提到过,
只是那是我不知叫什么名词,就从用途出发,叫做“根据周边点数去噪”。腐蚀的原理也一样,
就是根据当前点的周边点数(如3X3的,周边就有8个点)来修改当前点的状态的。
代码是我从VC代码中转译过来的,注释都沿用了原作者的文字(别说是剽窃,^_^)。唯一改
进的地方是,原代码功能只能处理0和255的二值灰度(搞不懂为什么这样,对于250、128
这样的都不行,还不如弄成二值灰度,别弄256灰度了),我将之改成了能根据0~255中任意
灰度划界的256灰度图像!以下是C#代码: 1 /// <summary> 2 /// 该函数用于对图像进行腐蚀运算。结构元素为水平方向或垂直方向的三个点, 3 /// 中间点位于原点;或者由用户自己定义3×3的结构元素。4 ///
</summary>
5 /// <param name="dgGrayValue">前后景临界值</param>
6 /// <param name="nMode">腐蚀方式:0表示水平方向,1垂直
方向,2自定义结构元素。</param>
7 /// <param name="structure"> 自定义的3×3结构元素
</param>
8 public void ErosionPic(int dgGrayValue, int nMode, bool[,] structure)
9 {
10 int lWidth = bmpobj.Width;
11 int lHeight = bmpobj.Height;
12 Bitmap newBmp = new Bitmap(lWidth, lHeight);
13
14 int i, j, n, m; //循环变量
15 Color pixel; //像素颜色值
16
17 if (nMode == 0)
18 {
19 //使用水平方向的结构元素进行腐蚀
20 // 由于使用1×3的结构元素,为防止越界,所以不处理最左边和最右
边 21 // 的两列像素
22 for (j = 0; j < lHeight; j++)
23 {
24 for (i = 1; i < lWidth - 1; i++)
25 {
26 //目标图像中的当前点先赋成黑色
27 newBmp.SetPixel(i, j, Color.Black);
28
29 //如果源图像中当前点自身或者左右有一个点不是黑色,
30 //则将目标图像中的当前点赋成白色
31 if (bmpobj.GetPixel(i - 1, j).R > dgGrayValue ||