基于PCNN的图像分割的matlab实现.doc_第1页
基于PCNN的图像分割的matlab实现.doc_第2页
基于PCNN的图像分割的matlab实现.doc_第3页
基于PCNN的图像分割的matlab实现.doc_第4页
基于PCNN的图像分割的matlab实现.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于PCNN的图像分割的matlab实现图像分割是一种重要的图像技术,在理论研究和实际应用中都得到了人们的广泛重视。图像分割的方法和种类有很多,有些分割运算可直接应用于任何图像,而另一些只能适用于特殊类别的图像。有些算法需要先对图像进行粗分割,因为他们需要从图像中提取出来的信息。例如,可以对图像的灰度级设置门限的方法分割。许多不同种类的图像或景物都可作为待分割的图像数据,不同类型的图像,已经有相对应的分割方法对其分割,同时,某些分割方法也只是适合于某些特殊类型的图像分割。分割结果的好坏需要根据具体的场合及要求衡量。图像分割是从图像处理到图像分析的关键步骤,可以说,图像分割结果的好坏直接影响对图像的理解。脉冲耦合神经网络( PCNN) 是一种不同于传统人工神经网络的新型神经网络,它有着重要的生物学背景,是由Eckhorn 为解释在猫的大脑视觉皮层中实验所观察到的与特征有关的神经元同步行为现象而提出的。PCNN 的这个生物学背景使它在图像处理中具有先天优势,有着与传统方法进行图像处理所无法比拟的优越性。下面的程序是基于PCNN最基本的图像分割的matlab实现,分割效果较好。主程序:1. functionEdge,Numberofaera=PCNN(X) 2. %X:输入的灰度图像,Edge:检测到的一些边界点,Numberofaera则表明了在各次迭代时激活的块区域 3. clear; 4. clc; 5. I=imread(lena1.bmp); 6. Xa,Ya=size(I); 7. subplot(1,2,1); 8. imshow(I); 9. %imshow(I); 10. X=double(I); 11. %X=double(imread(lena.bmp); 12. Weight=0.510.5;101;0.510.5;%此可权值矩阵的选取原则(或者根据)是什么? 13. Beta=0.32; 14. Yuzhi=200; 15. Decay=0.31; 16. a,b=size(X); 17. Threshold=zeros(a,b); 18. S=zeros(a+2,b+2); 19. B=zeros(a,b);%标记样板,表明该pixel是否被激活过; 20. Y=zeros(a,b); 21. Edge=zeros(a,b);Numberofaera=zeros(a,b);Numberofaera_1=zeros(a,b); 22. Num_1=0;Num=0; 23. n=1; 24. while(sum(sum(B)=Xa*Ya)%若采用128*128的图像,须注意。 25. fori0=2:a+1 26. fori1=2:b+1 27. V=S(i0-1,i1-1)S(i0-1,i1)S(i0-1,i1+1); 28. S(i0,i1-1)S(i0,i1)S(i0,i1+1); 29. S(i0+1,i1-1)S(i0+1,i1)S(i0+1,i1+1); 30. L=sum(sum(V.*Weight); 31. F=X(i0-1,i1-1); 32. U=double(F)*(1+Beta*double(L); 33. ifU=Threshold(i0-1,i1-1)|Threshold(i0-1,i1-1)95 34. T(i0-1,i1-1)=1;%这是什么? 35. Threshold(i0-1,i1-1)=Yuzhi; 36. Y(i0-1,i1-1)=1; 37. ifn=1 38. B(i0-1,i1-1)=0;%避免第一次全部激发造成的影响 39. else40. B(i0-1,i1-1)=1;%已发射过的标记 41. Threshold(i0-1,i1-1)=1000000;%相当于不会被第二次激活 42. end 43. else44. T(i0-1,i1-1)=0;%nouse? 45. Y(i0-1,i1-1)=0; 46. end47. end48. end49. Threshold(find(B=1)=exp(-Decay)*Threshold(find(B=1); 50. %被激活过的像不再参与迭代过程 51. ifn=1 52. Edge=Edge+judge_edge(Y,n); 53. Y(find(Edge0)=0;%边界点被置零,Y本来是激发的像素,现在边界被置零, 54. %也不能说白激发了,B矩阵有纪录!当然下次就休想再被激发 55. Numberofaera_1,Num_1=bwlabel(Y,4); 56. fori=1:a 57. forj=1:b 58. ifNumberofaera_1(i,j)=0 59. Numberofaera_1(i,j)=Numberofaera_1(i,j)+Num; 60. end61. end62. end63. Numberofaera=Numberofaera+Numberofaera_1; 64. Num=Num_1; 65. end66. ifn=1 67. S=zeros(a+2,b+2); 68. else69. S=Bianhuan(T); 70. end71. n=n+1; 72. Numberofaera_1=zeros(a,b); 73. subplot(1,2,2); 74. imshow(S); 75. end%while 76. 77. 边缘检测:1. functionY=judge_edge(X,n)%X:每次迭代后PCNN输出的二值图像,如何准确判断边界点是关键 2. a,b=size(X); 3. T=Jiabian(X); 4. Y=zeros(a,b); 5. W=zeros(a,b); 6. fori=2:a+1 7. forj=2:b+1 8. if(T(i,j)=1)&(T(i-1,j)=0&T(i+1,j)=0)|(T(i,j-1)=0&T(i,j+1)=0)|(T(i-1,j-1)=0&T(i+1,j+1)=0)|(T(i+1,j-1)=0&T(i-1,j+1)=0) 9. Y(i-1,j-1)=-n; 10. end11. end12. end这一步也非常重要加边,所谓加班就是在二维方向上对图像进行扩充,把扩充后的图像最边缘作为图像的边缘,以下程序实现图像的扩充1. functionY=Jiabian(X) 2. m,n=size(X); 3. Y=zeros(m+2,n+2); 4. fori=1:m+2 5. forj=1:n+2 6. ifi=1&j=1&j=n+2 7. Y(i,j)=X(1,j-1); 8. elseifj=1&i=1&i=m+2 9. Y(i,j)=X(i-1,1); 10. elseifi=1&j=n+2&i=m+2 11. Y(i,j)=X(i-1,n); 12. elseifi=m+2&j=1&j=n+2 13. Y(i,j)=X(m,j-1); 14. elseifi=1&j=1 15. Y(i,j)=X(i,j); 16. elseifi=1&j=n+2 17. Y(i,j)=X(1,n); 18. elseifi=(m+2)&j=1 19. Y(i,j)=X(m,1); 20. elseifi=m+2&j=n+2 21. Y(i,j)=X(m,n); 22. else 23. Y(i,j)=X(i-1,j-1); 24. end 25. end 26. end 27. 28. 变换:1. functionY=Bianhuan(X) 2. m,n=size(X); 3. Y=zeros(m+2,n+2); 4. fori=1:m+2 5. forj=1:n+2 6. ifi=1|j=1|i=m+2|j=n+2 7. Y(i,j)=0; 8. else 9. Y(i,j)=X(i-1,j-1); 10. end

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论