• 大小: 187KB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2024-01-08
  • 语言: Matlab
  • 标签: canny  MATLAB  

资源简介

数字图像处理作业canny边缘检测坎尼边缘检测MATLAB源码及实验报告

资源截图

代码片段和文件信息

%%%%%坎尼边缘检测器%%%%%
clear;close all;clc;
gc=imread(‘E:\学习\A+数字图像处理\实验2\Lena.jpg‘);
[MN~]=size(gc);
gc=double(gc);
g=gc(::1)*0.299+gc(::2)*0.587+gc(::3)*0.114;%Gray = R*0.299 + G*0.587 + B*0.114
%% 高斯平滑
m=3; n=3; sigma=1;
g1=Kuozhan(gmn);%%将原图像四周各扩展1行1列
gauss=fspecial(‘gaussian‘ [mn] sigma);%高斯滤波模板

gg=zeros(MN);
for i=1:M
    for j=1:N
        w=g1(i:i+m-1j:j+n-1);
        gf=w.*gauss;
        gg(ij)=sum(gf(:));%高斯平滑后的图像
    end
end
%% 计算梯度幅值和角度
mgx=[-1 0 1;-2 0 2;-1 0 1];
mgy=[1 2 1;0 0 0;-1 -2 -1];
gg1=Kuozhan(ggmn);

gx=zeros(MN); gy=zeros(MN); gm=zeros(MN);
dir=zeros(MN);%方向

for i=1:M
    for j=1:N
        window=gg1(i:i+m-1j:j+n-1);
        dx=window.*mgx;
        dy=window.*mgy;
        dx=dx‘;
        gx(ij)=sum(dx(:));
        gy(ij)=sum(dy(:));
        gm(ij)=sqrt(gx(ij)^2 + gy(ij)^2);
        
        theta=atand(gy(ij)/gx(ij)) + 90;%角度
        %%确定方向1234分别表示水平、-45°、垂直、+45°边缘
        if (theta >= 0 && theta < 45)
            dir(ij) = 3;
        elseif (theta >= 45 && theta < 90)
            dir(ij) = 2;
        elseif (theta >= 90 && theta < 135)
            dir(ij) = 1;
        else
            dir(ij) = 4;
        end
    end
end
%% 非极大化抑制
gn = zeros(MN);%存储非极大化抑制后的gN(xy)
for i = 2:M-1
    for j= 2:N-1
        if (dir(ij) == 3 && gm(ij) == max([gm(ij) gm(ij+1) gm(ij-1)]))
            gn(ij) = gm(ij);
        elseif (dir(ij) == 2 && gm(ij) == max([gm(ij) gm(i+1j-1) gm(i-1j+1)]))
            gn(ij) = gm(ij);
        elseif (dir(ij) == 1 && gm(ij) == max([gm(ij) gm(i+1j) gm(i-1j)]))
            gn(ij) = gm(ij);
        elseif (dir(ij) == 4 && gm(ij) == max([gm(ij) gm(i+1j+1) gm(i-1j-1)]))
            gn(ij) = gm(ij);
        end;
    end;
end;
%% 双阈值处理
gnh=zeros(MN);%存储阈值处理后的图像
TL=0.1*max(max(gn));%低阈值
TH=3*TL;%高阈值

for i = 1:M
    for j = 1:N
        if(gn(ij)           gnh(ij)=0;
        elseif(gn(ij)>TH)
                gnh(ij)=1;
        %TL        elseif ( gn(i+1j) < TH || gn(i-1j) < TH || gn(ij+1) < TH || gn(ij-1) < TH ||...
                gn(i-1j-1) < TH || gn(i-1 j+1) < TH || gn(i+1 j+1) < TH || gn(i+1 j-1) < TH)
                   gnh(ij) = 1;   
        end  
    end
end
%% 得到结果
imshow(gnh);
imwrite(gnh‘E:\学习\A+数字图像处理\实验2\Lena_canny0.1-1-3.jpg‘);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-06 13:03  canny edge detector\
     文件      429446  2018-11-23 16:16  canny edge detector\brain_canny0.1-1-3.bmp
     文件        2545  2018-11-23 16:25  canny edge detector\Canny.m
     文件      327118  2018-11-23 16:06  canny edge detector\house_canny0.25-1-3.bmp
     文件         826  2018-11-23 14:45  canny edge detector\Kuozhan.m
     文件       14724  2018-11-23 16:25  canny edge detector\Lena_canny0.1-1-3.jpg
     文件      161295  2018-11-23 16:27  canny edge detector\实验报告.pdf

评论

共有 条评论