资源简介
不用matlab的自带函数,自编的边缘提取程序。
代码片段和文件信息
pic2=imread(‘fig3.tif‘);
subplot(231);
imshow(pic2);
title(‘原始图像‘);
[ROWCOL]=size(pic2); %取表示图像的矩阵行列值数
count=imhist(pic2); %直方图统计 %图像矩阵大小
N=ROW*COL; %图像像素个数
L=256; %指定图像灰度级为256级
count=count/N; %各灰度级出现的概率
%================寻找出现概率不为0的最小灰度值=============
for i=2:L
if count(i)~=0
st=i-1;
break;
end
end
%================寻找出现概率不为0的最大灰度值=============
for i=L:-1:1
if count(i)~=0
nd=i-1;
break;
end
end
%=========================计算阈值========================
f=count(st+1:nd+1);
p=st;q=nd-st; %p和q分别是灰度的起始和结束值
u=0;
for i=1:q
u=u+f(i)*(p+i-1);
ua(i)=u;
end
for i=1:q
w1(i)=sum(f(1:i));
end
d=(u*w1-ua).^2./(w1.*(1-w1)); %求出不同i值时类间方差
[ytp]=max(d); %求出最大方差对应的灰度级
th=tp+p %threshold
if th>200
th=100;
end;
% if th<40
% th=45;
% end;
W=zeros(ROWCOL); %新建一幅ROW×COL大小的图
X=double(pic2);
%%%从第2行第2列开始到倒数第2行倒数第2列
for i=2:ROW-1
for j=2:COL-1
%%%%sobel算子
%%%%Dx是对X的偏导数,检测水平边缘,梯度方向是垂直的.
Dx=X(i+1j-1)+2*X(i+1j)+X(i+1j+1)-X(i-1j-1)-2*X(i-1j)-X(i-1j+1);
%%%%Dy是对Y的偏导数,检测垂直边缘的梯度方向是水平的.
Dy=X(i-1j+1)+2*X(ij+1)+X(i+1j+1)-X(i-1j-1)-2*X(ij-1)-X(i+1j-1);
%%%梯度的幅值
Mag=sqrt(Dx*Dx+Dy*Dy);
%%%梯度的方向角Dy有取0的可能.
%%%a(ij)=round(180*(atan(Dx/Dy)));
%%%梯度取整赋值给输出图像Wanted=W;
W(ij)=round(Mag);
end
end
for i=1:ROW
for j=1:COL
if W(ij)>th
W(ij)=255;
else
W(ij)=0;
end
end
end
subplot(232);
imshow(W);
title(‘Sobel算子边缘提取‘);
for i=2:ROW-1
for j=2:COL-1
%%%%prewitt算子
Dx=X(i+1j-1)+X(i+1j)+X(i+1j+1)-X(i-1j-1)-X(i-1j)-X(i-1j+1);
Dx=Dx*4/3;
Dy=X(i-1j+1)+X(ij+1)+X(i+1j+1)-X(i-1j-1)-X(ij-1)-X(i+1j-1);
Dy=Dy*4/3;
Mag=sqrt(Dx*Dx+Dy*Dy);
%%%梯度的方向角Dy有取0的可能.
%%%a(ij)=round(180*(atan(Dx/Dy)));
%%%梯度取整赋值给输出图像Wanted=W;
W(ij)=round(Mag);
end
end
%%%阈值人为设定随不同图像不同目的改变.
%%%大于阈值认为是边缘设为最亮;小于则为背景最黑
for i=1:ROW
for j=1:COL
if W(ij)>th
W(ij)=255;
else
W(ij)=0;
end
end
end
subplot(233);
imshow(W);
title(‘Prewitt算子边缘提取‘);
for i=1:ROW-1
for j=1:COL-1
%%%%prewitt算子
Dx=X(ij
- 上一篇:DWT盲水印嵌入和提取源代码
- 下一篇:流形学习算法(matlab)
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论