基于PCNN的图像分割的matlab实现 推荐
2010-04-10 17:51
731 查看
图像分割是一种重要的图像技术,在理论研究和实际应用中都得到了人们的广泛重视。图像分割的方法和种类有很多,有些分割运算可直接应用于任何图像,而另一些只能适用于特殊类别的图像。有些算法需要先对图像进行粗分割,因为他们需要从图像中提取出来的信息。例如,可以对图像的灰度级设置门限的方法分割。许多不同种类的图像或景物都可作为待分割的图像数据,不同类型的图像,已经有相对应的分割方法对其分割,同时,某些分割方法也只是适合于某些特殊类型的图像分割。分割结果的好坏需要根据具体的场合及要求衡量。图像分割是从图像处理到图像分析的关键步骤,可以说,图像分割结果的好坏直接影响对图像的理解。
脉冲耦合神经网络( PCNN) 是一种不同于传统人工神经网络的新型神经网络,它有着重要的生物学背景,是由Eckhorn 为解释在猫的大脑视觉皮层中实验所观察到的与特征有关的神经元同步行为现象而提出的。PCNN 的这个生物学背景使它在图像处理中具有先天优势,有着与传统方法进行图像处理所无法比拟的优越性。下面的程序是基于PCNN最基本的图像分割的matlab实现,分割效果较好。
主程序:
边缘检测:
这一步也非常重要——加边,所谓加班就是在二维方向上对图像进行扩充,把扩充后的图像最边缘作为图像的边缘,以下程序实现图像的扩充
变换:
变换和扩充几乎在每一个图像处理程序中都会用到,扩充也叫加边,另外还有去边的步骤。
处理效果:
本程序为最基本的PCNN图像分割,可从以下两个方面进行拓展
1.众所周知,PCNN的参数比较多,而且一般根据实验后的经验决定,参数确实非常难,可以通过一些智能算法对其参数进行训练
2.这是最基本的PCNN,使用改进的PCNN效果会更好
脉冲耦合神经网络( PCNN) 是一种不同于传统人工神经网络的新型神经网络,它有着重要的生物学背景,是由Eckhorn 为解释在猫的大脑视觉皮层中实验所观察到的与特征有关的神经元同步行为现象而提出的。PCNN 的这个生物学背景使它在图像处理中具有先天优势,有着与传统方法进行图像处理所无法比拟的优越性。下面的程序是基于PCNN最基本的图像分割的matlab实现,分割效果较好。
主程序:
function[Edge,Numberofaera]=PCNN(X) %X:输入的灰度图像,Edge:检测到的一些边界点,Numberofaera则表明了在各次迭代时激活的块区域 clear; clc; I=imread('lena1.bmp'); [Xa,Ya]=size(I); subplot(1,2,1); imshow(I); %imshow(I); X=double(I); %X=double(imread('lena.bmp')); Weight=[0.5 1 0.5;1 0 1;0.5 1 0.5]; %此可权值矩阵的选取原则(或者根据)是什么? Beta=0.32; Yuzhi=200; Decay=0.31; [a,b]=size(X); Threshold=zeros(a,b); S=zeros(a+2,b+2); B=zeros(a,b); %标记样板,表明该pixel是否被激活过; Y=zeros(a,b); Edge=zeros(a,b);Numberofaera=zeros(a,b);Numberofaera_1=zeros(a,b); Num_1=0;Num=0; n=1; while(sum(sum(B))~=Xa*Ya) %若采用128*128的图像,须注意。 for i0=2:a+1 for i1=2:b+1 V=[S(i0-1,i1-1) S(i0-1,i1) S(i0-1,i1+1); S(i0,i1-1) S(i0,i1) S(i0,i1+1); S(i0+1,i1-1) S(i0+1,i1) S(i0+1,i1+1)]; L=sum(sum(V.*Weight)); F=X(i0-1,i1-1); U=double(F)*(1+Beta*double(L)); if U>=Threshold(i0-1,i1-1)|Threshold(i0-1,i1-1)<95 T(i0-1,i1-1)=1; %这是什么? Threshold(i0-1,i1-1)=Yuzhi; Y(i0-1,i1-1)=1; if n==1 B(i0-1,i1-1)=0; %避免第一次全部激发造成的影响 else B(i0-1,i1-1)=1; %已发射过的标记 Threshold(i0-1,i1-1)=1000000;%相当于不会被第二次激活 end else T(i0-1,i1-1)=0; %no use? Y(i0-1,i1-1)=0; end end end Threshold(find(B~=1))=exp(-Decay)*Threshold(find(B~=1)); %被激活过的像不再参与迭代过程 if n~=1 Edge=Edge+judge_edge(Y,n); Y(find(Edge<0))=0; %边界点被置零,Y本来是激发的像素,现在边界被置零, %也不能说白激发了,B矩阵有纪录!当然下次就休想再被激发 [Numberofaera_1,Num_1]=bwlabel(Y,4); for i=1:a for j=1:b if Numberofaera_1(i,j)~=0 Numberofaera_1(i,j)=Numberofaera_1(i,j)+Num; end end end Numberofaera=Numberofaera+Numberofaera_1; Num=Num_1; end if n==1 S=zeros(a+2,b+2); else S=Bianhuan(T); end n=n+1; Numberofaera_1=zeros(a,b); subplot(1,2,2); imshow(S); end %while
边缘检测:
function Y=judge_edge(X,n) %X:每次迭代后PCNN输出的二值图像,如何准确判断边界点是关键 [a,b]=size(X); T=Jiabian(X); Y=zeros(a,b); W=zeros(a,b); for i=2:a+1 for j=2:b+1 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)) Y(i-1,j-1)=-n; end end end
这一步也非常重要——加边,所谓加班就是在二维方向上对图像进行扩充,把扩充后的图像最边缘作为图像的边缘,以下程序实现图像的扩充
function Y=Jiabian(X) [m,n]=size(X); Y=zeros(m+2,n+2); for i=1:m+2 for j=1:n+2 if i==1&j~=1&j~=n+2 Y(i,j)=X(1,j-1); elseif j==1&i~=1&i~=m+2 Y(i,j)=X(i-1,1); elseif i~=1&j==n+2&i~=m+2 Y(i,j)=X(i-1,n); elseif i==m+2&j~=1&j~=n+2 Y(i,j)=X(m,j-1); elseif i==1&j==1 Y(i,j)=X(i,j); elseif i==1&&j==n+2 Y(i,j)=X(1,n); elseif i==(m+2)&j==1 Y(i,j)=X(m,1); elseif i==m+2&j==n+2 Y(i,j)=X(m,n); else Y(i,j)=X(i-1,j-1); end end end
变换:
function Y=Bianhuan(X) [m,n]=size(X); Y=zeros(m+2,n+2); for i=1:m+2 for j=1:n+2 if i==1|j==1|i==m+2|j==n+2 Y(i,j)=0; else Y(i,j)=X(i-1,j-1); end end end
变换和扩充几乎在每一个图像处理程序中都会用到,扩充也叫加边,另外还有去边的步骤。
处理效果:
本程序为最基本的PCNN图像分割,可从以下两个方面进行拓展
1.众所周知,PCNN的参数比较多,而且一般根据实验后的经验决定,参数确实非常难,可以通过一些智能算法对其参数进行训练
2.这是最基本的PCNN,使用改进的PCNN效果会更好
相关文章推荐
- 基于PCNN的图像分割的matlab实现
- 基于经典分割算法的图像内细胞识别与计数(matlab实现)(不定期更新完善)
- 基于VC与Matlab的混合编程实现图像的三维显示
- 基于深度学习的图像分割和keras 的实现
- 基于GraphCuts图割算法的图像分割----OpenCV代码与实现
- 基于空间相关的图像模板匹配及MATLAB实现
- 基于MATLAB中级联分类器的人脸五官分割实现
- 基于水平投影,垂直投影的字符图像分割思路和代码实现
- 眼底图像血管增强与分割--(3)基于PCA的增强算法原理及实现
- 模式识别经典算法——FCM图像聚类分割(最简matlab实现)
- MATLAB实现基于邻近插值的图像旋转代码
- matlab粒子群算法结合模糊聚类分割算法实现图像的分割
- 基于GraphCuts图割算法的图像分割----OpenCV代码与实现
- matlab基于遗传算法的最大熵值法的双阈值图像分割
- 基于FCM的灰度图像的分割, matlab免费源码
- 基于GraphCuts图割算法的图像分割----OpenCV代码与实现
- 数据挖掘-matlab实现基于MovieLens数据集的协同过滤电影推荐系统
- 脉冲耦合神经网络(PCNN)的matlab实现 推荐
- MATLAB实现静态图像分割
- 基于可变中心任意形状结构元素的图像腐蚀及matlab实现