骨架提取和交叉点检测的matlab实现

来源:本站
导读:目前正在解读《骨架提取和交叉点检测的matlab实现》的相关信息,《骨架提取和交叉点检测的matlab实现》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《骨架提取和交叉点检测的matlab实现》的详细说明。
简介:本文介绍了骨架提取和交叉点检测的matlab实现,用的是中轴法,细化法检测出来的是边缘。

map1=imread('p.jpg');[row,col,dep]=size(map1);   %行,列,深度值map=zeros(row,col);pixsum=row*col;                %像素总数%灰度化for i=1:row    for j=1:col        map(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);    endend%灰度化完成,输出灰度图figure(1)imshow(map,[])title('原始灰度图像')Y=zeros(row,col);       %存储输出图像%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5根据通道二值化    for i=1:row        for j=1:col          if map1(i,j,2)>map1(i,j,1)&&map1(i,j,2)>map1(i,j,3)              Y(i,j)=1;           else              Y(i,j)=0;            end        end    endfigure(2)imshow(Y,[])title('二值化后图像')%以下为骨架提取程序temp=ones(row,col);N=0;           %统计邻域内非零像素个数。T=0;           %统计0-1变换次数for k=1:80      %大循环次数    for i=2:row-1        for j=2:col-1            a=[Y(i,j),Y(i,j-1),Y(i+1,j-1),Y(i+1,j),Y(i+1,j+1),Y(i,j+1),Y(i-1,j+1),Y(i-1,j),Y(i-1,j-1)];%邻域元素排序。中间为1,左边为2,逆时针分别为2---9            if a(1)==1                for m=1:8                    if a(m)==1                        N=N+1;                    end                end                for n=1:7                    if a(n)==0&&a(n+1)==1                        T=T+1;                    end                end                if a(8)==0&&a(1)==1                    T=T+1;                end            end            if (N>=2)&&(N<=6)&&(T==1)&&(a(2)*a(4)*a(6)==0)&&(a(4)*a(6)*a(8)==0)                temp(i,j)=0;            %标记要删除的点,标志为1            end            N=0;            T=0;        end    end    %删除点    for i=1:row        for j=1:col            if temp(i,j)==0                Y(i,j)=0;            end        end    end    %第一步完成    for i=2:row-1        for j=2:col-1            a=[Y(i,j),Y(i,j-1),Y(i+1,j-1),Y(i+1,j),Y(i+1,j+1),Y(i,j+1),Y(i-1,j+1),Y(i-1,j),Y(i-1,j-1)];%邻域元素排序。中间为1,左边为2,逆时针分别为2---9            if a(1)==1                for m=2:9                    if a(m)==1                        N=N+1;                    end                end                for n=1:7                    if a(n)==0&&a(n+1)==1                        T=T+1;                    end                end                if a(8)==0                    T=T+1;                end            end            if (N>=2)&&(N<=6)&&(T==1)&&(a(2)*a(4)*a(8)==0)&&(a(2)*a(6)*a(8)==0)                temp(i,j)==0;            %标记要删除的点,标志为1            end            N=0;            T=0;        end    end    %删除点    for i=1:row        for j=1:col            if temp(i,j)==0                Y(i,j)=0;            end        end    end        %第二步完成end%完成,输出figure(3)imshow(Y,[])title('提取的骨架')%以下为交叉点检测及标志,交叉点标注在灰度图中temp1=zeros(row,col);for i=2:row-1    for j=2:col-1        c=sum(sum(Y(i-1:i+1,j-1:j+1)));        if c>=4            temp1(i,j)=1;        end    endendfor i=1:row    for j=1:col        if temp1(i,j)==1           map(i,j)=255;        end    endend%标注完成,显示灰度图figure(4)imshow(map,[])title('标注的交叉点')

提醒:《骨架提取和交叉点检测的matlab实现》最后刷新时间 2024-03-14 01:02:34,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《骨架提取和交叉点检测的matlab实现》该内容的真实性请自行鉴别。