编制一个通用的边缘提取,里面包含各种算子的程序。

  • 虫虫123456
    了解作者
  • matlab
    开发工具
  • 165.2KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 5 积分
    下载积分
  • 0
    下载次数
  • 2022-06-27 23:09
    上传日期
编制一个通用的边缘提取,里面包含各种算子的程序。
5ef0235e0ac96.zip
  • 新建文件夹
  • assignement4.m
    3.2KB
  • lena1.bmp
    257.1KB
内容介绍
I=imread('lena1.bmp'); size_I=size(I); isgrb=size(size_I); if isgrb(2)==3 I=rgb2gray(I); end subplot(2,3,6); imshow(I); %robert ans=zeros(size(I)); Isize=size(I); for i=1:Isize(1)-1 for j=1:Isize(2)-1 ans(i,j)=abs(I(i,j)-I(i+1,j))+abs(I(i,j)-I(i,j+1)); if ans(i,j)>30 ans(i,j)=255; else ans(i,j)=0; end end end subplot(2,3,1); imshow(ans); %prewitt ans=zeros(size(I)); Isize=size(I); I=double(I); fx=0; fy=0; for i=2:Isize(1)-1 for j=2:Isize(2)-1 fx=(I(i-1,j+1)+I(i,j+1)+I(i+1,j+1))-(I(i-1,j-1)+I(i,j-1)+I(i+1,j-1)); fy=(I(i+1,j-1)+I(i+1,j)+I(i+1,j+1))-(I(i-1,j-1)+I(i-1,j)+I(i-1,j+1)); ans(i,j)=sqrt(fx*fx+fy*fy); if ans(i,j)>130 ans(i,j)=255; else ans(i,j)=0; end end end ans=uint8(ans); subplot(2,3,2); imshow(ans); %sobel ans=zeros(size(I)); Isize=size(I); I=double(I); fx=0; fy=0; for i=2:Isize(1)-1 for j=2:Isize(2)-1 fx=(I(i-1,j+1)+2*I(i,j+1)+I(i+1,j+1))-(I(i-1,j-1)+2*I(i,j-1)+I(i+1,j-1)); fy=(I(i+1,j-1)+2*I(i+1,j)+I(i+1,j+1))-(I(i-1,j-1)+2*I(i-1,j)+I(i-1,j+1)); ans(i,j)=sqrt(fx*fx+fy*fy); if ans(i,j)>160 ans(i,j)=255; else ans(i,j)=0; end end end ans=uint8(ans); subplot(2,3,3); imshow(ans); %marr ans=zeros(size(I)); Isize=size(I); I=double(I); fx=0; fy=0; for i=3:Isize(1)-2 for j=3:Isize(2)-2 ans(i,j)=16*I(i,j)-2*I(i-1,j)-2*I(i+1,j)-2*I(i,j-1)-2*I(i,j+1)-I(i-1,j-1)-I(i-1,j+1)-I(i+1,j-1)-I(i+1,j+1)-I(i-2,j)-I(i+2,j)-I(i,j-2)-I(i,j+2); if ans(i,j)>-120 ans(i,j)=0; else ans(i,j)=255; end end end ans=uint8(ans); subplot(2,3,4); imshow(ans); %canny gauss_I=I; Isize=size(I); ans=zeros(size(I)); dir=zeros(size(I)); I=double(I); gauss_I=double(gauss_I); fx=0; fy=0; for i=2:Isize(1)-1 for j=2:Isize(2)-1 fx=gauss_I(i,j)+gauss_I(i,j+1)-gauss_I(i+1,j)-gauss_I(i+1,j+1); fy=gauss_I(i,j)+gauss_I(i+1,j)-gauss_I(i,j+1)-gauss_I(i+1,j+1); ans(i,j)=sqrt(fx*fx+fy*fy); dir(i,j)=atan(fy/fx); end end for i=2:Isize(1)-1 for j=2:Isize(2)-1 if dir(i,j)>=-pi/8 & dir(i,j)<pi/8 if (ans(i,j)==ans(i,j-1) | ans(i,j)==ans(i,j+1) ) ans(i,j)=0; end end if dir(i,j)>=pi/8 & dir(i,j)<3*pi/8 if (ans(i,j)==ans(i-1,j+1) | ans(i,j)==ans(i+1,j-1)) ans(i,j)=0; end end if dir(i,j)>=3*pi/8 | dir(i,j)<-3*pi/8 if (ans(i,j)==ans(i-1,j) | ans(i,j)==ans(i+1,j) ) ans(i,j)=0; end end if dir(i,j)<-pi/8 & dir(i,j)>=3*pi/8 if (ans(i,j)==ans(i-1,j-1) | ans(i,j)==ans(i+1,j+1) ) ans(i,j)=0; end end if ans(i,j)<40 ans(i,j)=0; else ans(i,j)=255; end end end ans=uint8(ans); subplot(2,3,5); imshow(ans);
评论
    相关推荐
    • canny算子.zip
      通过matlab手动编程实现canny算子
    • canny算子 matlab
      canny算子的边缘提取,以文档形式存在
    • canny算子的实现
      USTC研一图像分析课程,自己实现canny算子 I = imread('test images\test images\lenna.jpg'); J= imread('test images\test images\airport.tif'); K = imread('test images\test images\cameraman.jpg'); L = ...
    • 自编canny算子
      基于matlab的边缘处理程序,采用自编的canny算子
    • canny算子边缘提取
      在matlab中,编写的canny算子进行边缘提取,并且与matlab自带的canny算子进行比较。
    • matlab canny算子
      利用matlab语言,自己编写的关于canny边缘检测算子的程序。
    • CANNY算子边缘检测
      可调试的纯C语言CANNY算子边缘检测,不过里面结构体需重新定义
    • canny算子边缘检测-Canny.rar
      canny算子边缘检测-Canny.rar canny算子边缘检测,详细地代码,希望对大家有帮助 function CVHomework1 % r = imread; % I=rgb2gray;  I = imread;  BW = canny_edge;  figure,imshow  figure,imshow ...
    • Canny算子 edge detection
      经典的canny算子,用于提取图像边缘,边缘保持滤波预处理的Canny算子较原有Canny算子在边缘检测性能方面有一定的改善;边缘保持滤在Canny算子实施边缘检测前,运用具有边缘保持性能的滤波器做预处理.仿真实验主、客观...
    • canny算子MFC实现
      在vs2008中实现的canny算子程序,用MFC写的图形界面。