《2022年2022年灰度图像的腐蚀算法和细化算法 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年灰度图像的腐蚀算法和细化算法 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、灰度图像的腐蚀算法和细化算法(C#代码)最近做一些图像处理,需要将图像中的一些像素过滤一下,有网友给提了个名词:腐蚀算法。我不是学图像学的,乍一听,觉得很神奇。后来从网上收集了一些VC 代码,研究了一下,发现其它也就是那么回事。尤其是腐蚀算法,我在以前的验证码图片去噪声的文章中提到过,只是那是我不知叫什么名词,就从用途出发,叫做“根据周边点数去噪”。腐蚀的原理也一样,就是根据当前点的周边点数(如3X3 的,周边就有8 个点)来修改当前点的状态的。代码是我从VC 代码中转译过来的,注释都沿用了原作者的文字(别说是剽窃,_)。唯一改进的地方是,原代码功能只能处理0 和 255 的二值灰度(搞不懂为
2、什么这样,对于250、128这样的都不行,还不如弄成二值灰度,别弄256 灰度了),我将之改成了能根据0255 中任意灰度划界的256 灰度图像!以下是 C#代码:1/2/该函数用于对图像进行腐蚀运算。结构元素为水平方向或垂直方向的三个点,3/中间点位于原点;或者由用户自己定义33的结构元素。4/5/前后景临界值6/腐蚀方式:0 表示水平方向,1 垂直方向,2 自定义结构元素。7/自定义的33结构元素 8public void ErosionPic(int dgGrayValue,int nMode,bool,structure)910int lWidth=bmpobj.Width;11int
3、 lHeight=bmpobj.Height;12BitmapnewBmp=new Bitmap(lWidth,lHeight);1314int i,j,n,m;/循环变量15Color pixel;/像素颜色值1617if(nMode=0)1819/使用水平方向的结构元素进行腐蚀20/由于使用13的结构元素,为防止越界,所以不处理最左边和最右边21/的两列像素22for(j=0;j lHeight;j+)2324for(i=1;i dgGrayValue|名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 7 页 -32bmpobj.GetPixel(i,j).R dgGrayVa
4、lue|33bmpobj.GetPixel(i+1,j).R dgGrayValue)34newBmp.SetPixel(i,j,Color.White);35363738else if(nMode=1)3940/使用垂真方向的结构元素进行腐蚀41/由于使用31的结构元素,为防止越界,所以不处理最上边和最下边42/的两行像素43for(j=1;j lHeight-1;j+)4445for(i=0;i dgGrayValue|53bmpobj.GetPixel(i,j).R dgGrayValue|54bmpobj.GetPixel(i,j+1).R dgGrayValue)55newBmp.S
5、etPixel(i,j,Color.White);56575859else6061if(structure.Length!=9)/检查自定义结构62return;63/使用自定义的结构元素进行腐蚀64/由于使用33的结构元素,为防止越界,所以不处理最左边和最右边65/的两列像素和最上边和最下边的两列像素66for(j=1;j lHeight-1;j+)6768for(i=1;i lWidth-1;i+)6970/目标图像中的当前点先赋成黑色71newBmp.SetPixel(i,j,Color.Black);72/如果原图像中对应结构元素中为黑色的那些点中有一个不是黑色,73/则将目标图像中的
6、当前点赋成白色74for(m=0;m 3;m+)75名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 7 页 -76for(n=0;n dgGrayValue)8182newBmp.SetPixel(i,j,Color.White);83break;8485868788899091bmpobj=newBmp;92939495/96/该函数用于对图像进行细化运算。要求目标图像为灰度图像97/98/99public void ThiningPic(int dgGrayValue)100101int lWidth=bmpobj.Width;102int lHeight=bmpobj.He
7、ight;103/BitmapnewBmp=new Bitmap(lWidth,lHeight);104105bool bModified;/脏标记106int i,j,n,m;/循环变量107Color pixel;/像素颜色值108109/四个条件110bool bCondition1;111bool bCondition2;112bool bCondition3;113bool bCondition4;114115int nCount;/计数器116int,neighbour=new int5,5;/55 相邻区域像素值117118119名师资料总结-精品资料欢迎下载-名师精心整理-第
8、3 页,共 7 页 -120bModified=true;121while(bModified)122123bModified=false;124125/由于使用55的结构元素,为防止越界,所以不处理外围的几行和几列像素126for(j=2;j lHeight-2;j+)127128for(i=2;i dgGrayValue)136137if(bmpobj.GetPixel(i,j).R 255)138bmpobj.SetPixel(i,j,Color.White);139continue;140141142/获得当前点相邻的55区域内像素值,白色用0 代表,黑色用1 代表143for(m=0
9、;m 5;m+)144145for(n=0;n 5;n+)146147neighbourm,n=bmpobj.GetPixel(i+m-2,j+n-2).R dgGrayValue?1:0;148149150151/逐个判断条件。152/判断 2=NZ(P1)=2&nCount=6)157158bCondition1=true;159160161/判断 Z0(P1)=1162nCount=0;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 7 页 -163if(neighbour 1,2=0&neighbour 1,1=1)164nCount+;165if(neighbour 1
10、,1=0&neighbour 2,1=1)166nCount+;167if(neighbour 2,1=0&neighbour 3,1=1)168nCount+;169if(neighbour 3,1=0&neighbour 3,2=1)170nCount+;171if(neighbour 3,2=0&neighbour 3,3=1)172nCount+;173if(neighbour 3,3=0&neighbour 2,3=1)174nCount+;175if(neighbour 2,3=0&neighbour 1,3=1)176nCount+;177if(neighbour 1,3=0&n
11、eighbour 1,2=1)178nCount+;179if(nCount=1)180bCondition2=true;181182/判断 P2*P4*P8=0or Z0(p2)!=1183if(neighbour 1,2*neighbour 2,1*neighbour 2,3=0)184185bCondition3=true;186187else188189nCount=0;190if(neighbour 0,2=0&neighbour 0,1=1)191nCount+;192if(neighbour 0,1=0&neighbour 1,1=1)193nCount+;194if(neigh
12、bour 1,1=0&neighbour 2,1=1)195nCount+;196if(neighbour 2,1=0&neighbour 2,2=1)197nCount+;198if(neighbour 2,2=0&neighbour 2,3=1)199nCount+;200if(neighbour 2,3=0&neighbour 1,3=1)201nCount+;202if(neighbour 1,3=0&neighbour 0,3=1)203nCount+;204if(neighbour 0,3=0&neighbour 0,2=1)205nCount+;206if(nCount!=1)名
13、师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 7 页 -207bCondition3=true;208209210/判断 P2*P4*P6=0or Z0(p4)!=1211if(neighbour 1,2*neighbour 2,1*neighbour 3,2=0)212213bCondition4=true;214215else216217nCount=0;218if(neighbour 1,1=0&neighbour 1,0=1)219nCount+;220if(neighbour 1,0=0&neighbour 2,0=1)221nCount+;222if(neighbou
14、r 2,0=0&neighbour 3,0=1)223nCount+;224if(neighbour 3,0=0&neighbour 3,1=1)225nCount+;226if(neighbour 3,1=0&neighbour 3,2=1)227nCount+;228if(neighbour 3,2=0&neighbour 2,2=1)229nCount+;230if(neighbour 2,2=0&neighbour 1,2=1)231nCount+;232if(neighbour 1,2=0&neighbour 1,1=1)233nCount+;234if(nCount!=1)235b
15、Condition4=true;236237238if(bCondition1&bCondition2&bCondition3&bCondition4)239240bmpobj.SetPixel(i,j,Color.White);241bModified=true;242243else244245bmpobj.SetPixel(i,j,Color.Black);246247248249250/复制细化后的图像名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 7 页 -251/bmpobj=newBmp;252253名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 7 页 -