资源简介
该程序实现了基于matlab的canny算子的边缘检测,检测效果十分理想,已经尝试过,并且可以运行。
代码片段和文件信息
function e=canny_edge(Isigma)
%functione=edge(I‘canny‘threshsigma);
%该函数实现Canny算子提取边缘点
%输入图像为I,标准差sigma,输出为边缘图像e
I=255*double(I);%将图像转化为double型
[mn]=size(I);
Rr=2:m-1;cc=2:n-1;
e=repmat(logical(uint8(0))mn);
%产生同样大小的边缘图像e,初始化为1 ,即初始化边缘
GaussianDieOff=0.0001;%设定高斯函数消失门限
PercentOfPixelsNotEdges=0.7;%用于计算边缘门限
ThresholdRatio=0.2;%设置两个门限的比例
%首先设计高斯滤波器和它的微分
pw=1:30;
%设定滤波器宽度
ssq=sigma*sigma;
%计算方差
width = find(exp(-(pw.*pw)/(2*ssq))>GaussianDieOff1‘last‘);
if isempty(width)
width = 1; %当使用者键入很小的sigma时
end
%计算滤波算子宽度
t = (-width:width);
gau = exp(-(t.*t)/(2*ssq))/(2*pi*ssq); % 一维高斯滤波器
[xy]=meshgrid(-width:width-width:width);
dgau2D=-x.*exp(-(x.*x+y.*y)/(2*ssq))/(pi*ssq);%高斯滤波器的一阶导数
%平滑图像
aSmooth=imfilter(Igau‘conv‘‘replicate‘); % 按行滤波
aSmooth=imfilter(aSmoothgau‘‘conv‘‘replicate‘); % 再按列滤波
ax = imfilter(aSmooth dgau2D ‘conv‘‘replicate‘);
ay = imfilter(aSmooth dgau2D‘ ‘conv‘‘replicate‘);
mag=sqrt((ax.*ax)+(ay.*ay));
%计算滤波结果的幅度
magmax=max(mag(:));
if magmax>0
mag=mag/magmax;
%对滤波幅度进行归一化
end
%下面根据滤波幅度的概率密度计算滤波门限
[countsx]=imhist(mag64);
%计算滤波结果的幅度的直方图
highThresh=min(find(cumsum(counts)>PercentOfPixelsNotEdges*m*n))/64;
%通过设定非边缘点的比例来确定高门限
lowThresh=ThresholdRatio*highThresh;
%设置低门限为高门限乘以比例因子
thresh=[lowThreshhighThresh];
%下面进行非极大抑制
%大于高门限的点归于强边缘图像
%小于低门限的点归于弱边缘图像
idxStrong=[];
for dir=1:4
idxLocalMax=cannyFindLocalMaxima(diraxaymag);
idxWeak=idxLocalMax(mag(idxLocalMax)>lowThresh);
e(idxWeak)=1;
idxStrong=[idxStrong;idxWeak(mag(idxWeak)>highThresh)];
end
rstrong=rem(idxStrong-1m)+1;%rem是求余数
cstrong=floor((idxStrong-1)/m)+1;%向-∞取整
e=bwselect(ecstrongrstrong8);
%通过形态学算子将两幅图像的边缘进行连接
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Local Function : cannyFindLocalMaxima
%
function idxLocalMax = cannyFindLocalMaxima(directionixiymag)
%
% This sub-function helps with the non-maximum suppression in the Canny
% edge detector. The input parameters are:
%
% direction - the index of which direction the gradient is pointing
% read from the diagram below. direction is 1 2 3 or 4.
% ix
- 上一篇:史密斯圆图的matlab程序
- 下一篇:mclmcrrt8_3.dll
相关资源
- mclmcrrt8_3.dll
- 史密斯圆图的matlab程序
- SVM算法仿真matlab代码
- MATLAB R2012b crack 安装密钥
- 中国人口结构预测模型Matlab源程序
- Matlab+2017a+Win64+Crack
- rs(204188)编码器工程及matlab仿真
- matlab解方程与函数极值
- 基于样本块修补算法代码matlab
- MATLAB-批转换MP3文件为语谱图,并保存
- 真彩色图像转 256 色图像的MATLAB实现
- BPSK调制解调MATLAB程序
- 单列多服务台排队matlab仿真系统
- 群控电梯matlab仿真实现
- matlab设计FIR带阻滤波器
- 遗传算法-matlab代码
- 运动块估计算法的Matlab源程序
- 图片格式转换如bmp转jpg的matlab实现
- 用衍射追迹实现衍射受限透镜成像。
- MATLAB实现 哈夫曼 费诺编码
- matlab初学者的60个小程序
- boost电路Matlab闭环控制模型
- DNA加法MATLAB代码
- 锁相环环路滤波器参数设计代码(m
- 逻辑斯蒂回归-matlab
- 改进的RFID标签防碰撞算法
- matlab仿真RFID标签防碰撞算法 包括二进
- matlab仿真RFIDRFID标签防碰撞算法 包括
- 三相SVPWM整流模型
- 高等电力网络节点导纳矩阵LDU分解M
评论
共有 条评论