资源简介
不用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)
- 文献和程序,光伏发电PV,MATLAB程序
- matlab图像分解四叉树分解显示
- 基于Matlab的二阶系统的模糊自适应P
- boost DC-DC变换器matlab仿真模型
- 基于MATLABGUI的语音信号特征提取系统
- matlab图像锐化源代码
- matlab迭代法自动阈值分割算法
- Matlab仿真_高勇.caj
- DBF的matlab仿真程序
- 生成地质体三维建模理论模型MATLAB
- 求取两个向量间欧氏距离MATLAB程序
- MATLAB实现股票价格预测 源程序代码
- 数字图像处理作业冈萨雷斯版源码M
- 用Matlab实现图像栅格化
- hough 检测直线、圆形matlab代码
- MATLAB计算长除法源码
- 基于神经网络的手写数字识别MATLAB源
- matlab实现伽罗华域上常系数乘法器
- 用MATLAB实现电磁波与目标作用的动态
- 基于MATLAB求解最短路问题
- MATLAB指纹识别代码可直接用
- 风机风轮模型
- 雷达系统仿真代码
- LPP局部保持投影MATLAB源代码
- 用MATLAB程序实现的语音基本谱减法
- 边界提取,边界连接,Matlab
- Matlab实现算术编码arithmetic coding,输入
- dijkstra算法代码
- 图像融合代码matlab
评论
共有 条评论