联通域边缘检测仿真源码程序 - matlab算法设计 - 谷速源码
下载频道> 资源分类> matlab源码> 算法设计> 联通域边缘检测仿真源码程序

标题:联通域边缘检测仿真源码程序
分享到:

所属分类: 算法设计 资源类型: 文件大小: 2.33 KB 上传时间: 2016-01-28 19:14:20 下载次数: 11 资源积分:1分 提 供 者: xiaopeng2 联通域边缘检测仿真源码程序
内容:
联通域边缘检测仿真源码程序,程序员在编程的过程中可以参考学习使用,希望对IT程序员有用,此源码程序简单易懂、方便阅读,有很好的学习价值!
clc
clear
A=rgb2gray(imread('a.jpg'));
%imhist(A);
A=medfilt2(A);
%  imshow(A);
%  figure;
 
[m,n]=size(A);
%二值化部分
for i=1:m
    for j=1:n
        if A(i,j)>79
            A(i,j)=0;
        else A(i,j)=255;
        end
    end
end
A=medfilt2(A);
A(2,1)=0;A(1,2)=0;A(2,2)=0;
A(2,178)=0;A(1,177)=0;A(2,177)=0;
A(178,2)=0;A(177,1)=0;A(177,2)=0;
A(177,177)=0;A(178,177)=0;A(177,178)=0;
 
%显示二值化后图像
imshow(A);
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%颗粒标记部分%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=zeros(m,n);
num=0;%记录颗粒数目
 
%扫描目标区域
for i=2:m
    for j=2:n
        if A(i,j)==255 && A(i-1,j)==0 && A(i,j-1)==0 && N(i-1,j)==0 && N(i,j-1)==0
            num=num+1;
            N(i,j)=num;
%         elseif A(i,j)==255 && A(i-1,j)==255 && A(i,j-1)==0
          elseif A(i,j)==255 && N(i-1,j)~=0 && N(i,j-1)==0
            N(i,j)=N(i-1,j);
%        elseif A(i,j)==255 && A(i-1,j)==0 && A(i,j-1)==255
         elseif A(i,j)==255 && N(i-1,j)==0 && A(i,j-1)~=0
            N(i,j)=N(i,j-1);
 %        elseif A(i,j)==255 && A(i-1,j)==255 && A(i,j-1)==255
          elseif A(i,j)==255 && N(i-1,j)~=0 && A(i,j-1)~=0 
            N(i,j)=N(i,j-1);
        elseif A(i,j)==0
            N(i,j)=0;
        end
    end
end
 
%二次扫描
for k=1:5
    for i=2:m-1
        for j=2:n-1
            if N(i,j)~=0
                if N(i-1,j-1)<N(i,j) && N(i-1,j-1)~=0
                     N(i,j)=N(i-1,j-1);
                elseif N(i-1,j)<N(i,j) && N(i-1,j)~=0
                     N(i,j)=N(i-1,j); 
                elseif N(i-1,j+1)<N(i,j) && N(i-1,j+1)~=0
                    N(i,j)=N(i-1,j+1);
                elseif N(i,j-1)<N(i,j) && N(i,j-1)~=0
                     N(i,j)=N(i,j-1); 
                elseif N(i,j+1)<N(i,j) && N(i,j+1)~=0
                     N(i,j)=N(i,j+1); 
                elseif N(i+1,j-1)<N(i,j) && N(i+1,j-1)~=0
                     N(i,j)=N(i+1,j-1);  
                elseif N(i+1,j)<N(i,j) && N(i+1,j)~=0
                     N(i,j)=N(i+1,j); 
                elseif N(i+1,j+1)<N(i,j) && N(i+1,j+1)~=0
                     N(i,j)=N(i+1,j+1);  
                end
                if N(i-1,j-1)>N(i,j) && N(i-1,j-1)~=0
                    N(i-1,j-1)=N(i,j);
                elseif N(i-1,j)>N(i,j) && N(i-1,j)~=0
                    N(i-1,j)=N(i,j);
                elseif N(i-1,j+1)>N(i,j)&&N(i-1,j+1)~=0
                    N(i-1,j+1)=N(i,j);
                elseif N(i,j-1)>N(i,j)&&N(i,j-1)~=0
                    N(i,j-1)=N(i,j);
                elseif N(i,j+1)>N(i,j)&&N(i,j+1)~=0
                    N(i,j+1)=N(i,j);
                elseif N(i+1,j-1)>N(i,j)&&N(i+1,j-1)~=0
                    N(i+1,j-1)=N(i,j);
                elseif N(i+1,j)>N(i,j)&&N(i+1,j)~=0
                    N(i+1,j)=N(i,j);
                elseif N(i+1,j+1)>N(i,j)&&N(i+1,j+1)~=0
                    N(i+1,j+1)=N(i,j);
                end
            end
        end
    end
end
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%统计颗粒数目(number)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:num
    Num(i)=0;%Num 存放不同目标区域的像素点数
end
 for i=1:m
     for j=1:n
         if N(i,j)~=0
             for t=1:num
                 if N(i,j)==t
                     Num(t)=Num(t)+1;
                 end
             end
         end
     end
 end
 number=0;%定义number为图像中细胞的数目
for i=1:num
    if Num(i)~=0
        number=number+1;
    end
end
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%统计颗粒平均面积(aver_area)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sum=double(0);
for i=1:num
    sum=sum+Num(i);
end
aver_area=sum/number;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求取颗粒平均周长(number)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%定义矩阵edge_target标记图像目标的边缘,边缘处像素点标记为1,其余像素点为0。 
edge_target=zeros(m,n);
%第一行像素点
for j=1:n
    if A(1,j)==0
        edge_target(1,j)=0;
    elseif A(1,j)==255
        edge_target(1,j)=1;
    end
end
%其余像素点
for i=2:m-1
    for j=2:n-1
        if A(i,j)==0
            edge_target(i,j)=0;
        elseif A(i,j)==255 && A(i-1,j)==255 && A(i,j-1)==255 && A(i,j+1)==255 && A(i+1,j)==255
            edge_target(i,j)=0;
        else edge_target(i,j)=1;
        end
    end
end
sum=double(0);
for i=1:m-1
    for j=1:n-1
        if edge_target(i,j)==1
            sum=sum+1;
        end
    end
end
figure;
imshow(edge_target);
aver_perimeter=sum/number;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求取颗粒的形状因子(aver_perimeter)%%%%%%%%%%%%%%%%%%%%%%%%%%%
sf=double(0);
sf=4*pi*aver_area/aver_perimeter^2;
 

文件列表(点击上边下载按钮,如果是垃圾文件请在下面评价差评或者投诉):

联通域边缘检测仿真源码程序/
联通域边缘检测仿真源码程序/code/
联通域边缘检测仿真源码程序/code/a.jpg
联通域边缘检测仿真源码程序/code/image_processing.m

关键词: 源码 边缘 程序

Top_arrow
回到顶部
联系方式| 版权声明| 招聘信息| 广告服务| 银行汇款| 法律顾问| 兼职技术| 付款方式| 关于我们|
网站客服网站客服 程序员兼职招聘 程序员兼职招聘
沪ICP备19040327号-3
公安备案号:沪公网安备 31011802003874号
库纳格流体控制系统(上海)有限公司 版权所有
Copyright © 1999-2014, GUSUCODE.COM, All Rights Reserved