博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Win8Metro(C#)数字图像处理--2.21二值图像腐蚀
阅读量:4315 次
发布时间:2019-06-06

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

原文:



[函数名称]

二值图像腐蚀函数CorrosionProcess(WriteableBitmap src)

[算法说明]

 二值图像腐蚀操作属于图像形态学的范畴,形态学运算是只针对二值图像进行,并依据数学形态学(Mathermatical Morphogy)集合论方法发展起来的数字图像处理方法,它主要包括腐蚀,膨胀,开,闭,击中,击不中等。

 图像形态学运算,要使用结构元素,所谓结构元素是指具有某种确定形状的基本结构,它的选择一般要求其具有旋转不变性或者镜像不变性,即:结构元素的原点在其几何中心处,周围像素关于原点对称。

 在这里我们选取如下的结构元素:

 其中,F为二值图像原图,X为结构元素原点所在的二值图像中的连通域。

 假设F中目标像素为255(白色),非目标为0(黑色),当结构元素S原点移动到点(x,y)时,如果S中所有点均包含在X(X中对应在S中所有点的位置均为255),则在腐蚀后的二值图像中,对应于S原点的位置为255(白色),否则为0(黑色)

 用通俗的话来说就是:用结构元素作为模板在原始二值图像种平滑一遍,扫描图像的每一个像素,用结构元素中的每一个元素与其覆盖的二值图像做“与”操作(假设结构元素都为1),如果结果都为1,则二值图像中对应结构元素原点位置的像素值为1,否则为0

[函数代码]

       ///<summary>

       /// Corrosion process.

       ///</summary>

       ///<param name="src">The source image(It should be the binary image).</param>

       ///<returns></returns>

       publicstaticWriteableBitmap CorrosionProcess(WriteableBitmap src)21图像腐蚀运算

       {

           if (src !=null)

           {

               int w = src.PixelWidth;

               int h = src.PixelHeight;

               WriteableBitmap corrosionImage =newWriteableBitmap(w, h);

               byte[] temp = src.PixelBuffer.ToArray();

               byte[] tempMask = (byte[])temp.Clone();

               for (int j = 0; j < h; j++)

               {

                   for (int i = 0; i < w ; i ++)

                   {

                       if (i == 0 || i == w - 1 || j == 0 || j == h - 1)

                       {

                           temp[i * 4 + j * w * 4] = (byte)255;

                           temp[i * 4 + 1 + j * w * 4] = (byte)255;

                           temp[i * 4 + 2 + j * w * 4] = (byte)255;

                       }

                       else

                       {

                           if (tempMask[i * 4 - 4 + j * w * 4] == 255 && tempMask[i * 4 + j * w * 4] == 255 && tempMask[i * 4 + 4 + j * w * 4] == 255

                               && tempMask[i * 4 + (j - 1) * w * 4] == 255 && tempMask[i * 4 + (j + 1) * w * 4] == 255)

                           {

                               temp[i * 4 + j * w * 4] = (byte)255;

                               temp[i * 4 + 1 + j * w * 4] = (byte)255;

                               temp[i * 4 + 2 + j * w * 4] = (byte)255;

                           }

                           else

                           {

                               temp[i * 4 + j * w * 4] = 0;

                               temp[i * 4 + 1 + j * w * 4] = 0;

                               temp[i * 4 + 2 + j * w * 4] = 0;

                           }

                       }

                   }

               }

               Stream sTemp = corrosionImage.PixelBuffer.AsStream();

               sTemp.Seek(0, SeekOrigin.Begin);

               sTemp.Write(temp, 0, w * 4 * h);

               return corrosionImage;

           }

           else

           {

               returnnull;

           }  

       }

[图像效果]

posted on
2018-03-13 10:10 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/8554121.html

你可能感兴趣的文章
程序猿崛起3——这一次,我用行动说话
查看>>
201521123038 《Java程序设计》 第一周学习总结
查看>>
每天一个linux命令(20):find命令之exec
查看>>
MVC HtmlHelper用法大全
查看>>
软件工程个人作业01
查看>>
python encode decode unicode区别及用法
查看>>
soTower框架学习(一)
查看>>
测试与发布
查看>>
Timus 1014. Product of Digits
查看>>
14软件工程第七次作业
查看>>
继承的特点与注意事项
查看>>
C02面向对象
查看>>
Thunder团队第二周 - Scrum会议2
查看>>
转 sql删除重复记录
查看>>
Yum数据库错误
查看>>
HDOJ树形DP专题之考研路茫茫——空调教室
查看>>
《结对-蓝牙考勤系统-测试过程》
查看>>
PAT 1034. Head of a Gang
查看>>
微信分享
查看>>
《数据结构》第1章:绪论
查看>>