matlab练习程序(Marr-Hildreth边缘检测)
2012-12-14 14:50
1086 查看
方法是先用LoG算子进行滤波,在对图像的过零点进行检测。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/14/873a370cf4a188785e41311454ce9505.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/14/a026f4dff02a7f3b5db066a63a00519b.jpg)
没有Canny效果好,不过能够得到闭合的曲线,当然,计算量也比Canny小。
clear all; close all; clc; %产生LoG算子(Laplacian of Gaussian) m=11; n=11; sigma=1.4; w=zeros(m,n); h_m=(m-1)/2; h_n=(n-1)/2; for i=1:m for j=1:n y=i-h_m; x=j-h_n; w(i,j)=(1/(sigma*sigma))*((y*y+x*x)/(sigma*sigma)-2)*exp(-(y*y+x*x)/(2*sigma*sigma)); end end w=w/sum(sum(w)); %归一化 img=double(imread('lena.jpg')); imgn=imfilter(img,w,'replicate'); %过零点检测,一个函数最大值大于零,最小值小于零,那么函数中间一定有为零的点 %准确的过零点的值需要插值 [m n]=size(img); for i=2:m-1 for j=2:n-1 tmp(1)=sum(sum(imgn(i-1:i,j-1:j))); tmp(2)=sum(sum(imgn(i-1:i,j:j+1))); tmp(3)=sum(sum(imgn(i:i+1,j-1:j))); tmp(4)=sum(sum(imgn(i:i+1,j:j+1))); Ma=max(tmp); Mi=min(tmp); if Ma>0 && Mi<0 imgn(i,j)=255; end end end imshow(imgn==255);
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/14/873a370cf4a188785e41311454ce9505.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/14/a026f4dff02a7f3b5db066a63a00519b.jpg)
没有Canny效果好,不过能够得到闭合的曲线,当然,计算量也比Canny小。
相关文章推荐
- matlab练习程序(Canny边缘检测)
- LOG边缘检测--Marr-Hildreth边缘检测算法
- matlab练习程序(SUSAN检测)
- Marr-Hildreth 边缘检测
- Log和Canny边缘检测(附Matlab程序)
- 图像锐化与边缘检测及matlab程序
- OpenCV-边缘检测算子Marr-Hildreth实现
- 一个很好的Matlab图像边缘检测程序
- matlab练习程序(霍夫变换检测直线斜率)
- Log和Canny边缘检测能力对比(附Matlab程序)
- Log和Canny边缘检测(附Matlab程序)
- matlab练习程序(SUSAN检测)
- Sobel边缘检测(matlab)
- MATLAB - 练习程序,直方图均衡化
- matlab练习程序(图像滤波时的边界处理2)
- matlab练习程序(条件膨胀)
- matlab练习程序(神经网络分类)
- matlab练习程序(Gabor Filter)
- pecv边缘检测程序 遇到的Link错误
- matlab练习程序(单层感知器)