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

• 虫虫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写的图形界面。