标签:
边缘定义为图像中亮度突变的区域,分为:细线型边缘、突变型边缘和渐变型边缘
1)突变型边缘位于图像中具有不同灰度值的相邻区域之间,对应于一阶导数的极值和二阶导数的过零点
2)细线型边缘对应于灰度变化曲线的极值,对应于一阶导数的过零点和二阶微分的极值点
2)渐进型边缘因变化缓慢,没有明确的边界点
图像处理中应用微分最常用的方法是计算梯度,梯度是方向导数取最大值的方向的向量
梯度定义为:
用其幅度代替:
为计算方便,也常用绝对值代替
最后用差分代替微分
I=im2double(rgb2gray(imread(‘106.jpg‘)));
figure;
imshow(I),title(‘原始图像‘);
[h w]=size(I);
edgeI=zeros(h,w);
for x=1:w-1;
for y=1:h-1
edgeI(y,x)=abs(I(y,x+1)-I(y,x))+abs(I(y+1,x)-I(y,x));%梯度运算
end
end
figure;
imshow(edgeI),title(‘边缘图像‘);
sharpI=I+edgeI;
figure;
imshow(sharpI),title(‘锐化图像‘);
Robert算子是通过交叉求微分实现边缘检测
模板表示:
和
Matlab提供函数:
BW=edge(I,type,parameters)
I=im2double(rgb2gray(imread(‘106.jpg‘)));
figure;
imshow(I),title(‘原始图像‘);
BW=edge(I,‘roberts‘);
H1=[1 0;0 -1];H2=[0 1;-1 0];
R1=imfilter(I,H1);
R2=imfilter(I,H2);
edgeI=abs(R1)+abs(R2);
figure;
imshow(edgeI),title(‘Robert梯度图像‘);
sharpI=I+edgeI;
figure;
imshow(sharpI),title(‘Robert锐化图像‘);
Sobel算子是一种
模板来表示:
I=im2double(rgb2gray(imread(‘106.jpg‘)));
figure;
imshow(I),title(‘原始图像‘);
BW=edge(I,‘roberts‘);
figure,imshow(BW),title(‘Sobel边缘检测‘)
H1=[1 0;0 -1];H2=[0 1;-1 0];
R1=imfilter(I,H1);
R2=imfilter(I,H2);
edgeI=abs(R1)+abs(R2);
figure;
imshow(edgeI),title(‘Robert梯度图像‘);
sharpI=I+edgeI;
figure;
imshow(sharpI),title(‘Robert锐化图像‘);
Prewitt算子与Sobel算子思路类似,但模板系数不同
模板来表示:
%%Prewitt算子
I=im2double(rgb2gray(imread(‘106.jpg‘)));
figure;
imshow(I),title(‘原始图像‘);
BW=edge(I,‘Prewitt‘);
figure,imshow(BW),title(‘Prewitt边缘检测‘)
H1=[-1 -1 -1;0 0 0;1 1 1];H2=[-1 0 1;-1 0 1;-1 0 1];
R1=imfilter(I,H1);
R2=imfilter(I,H2);
edgeI=abs(R1)+abs(R2);
figure;
imshow(edgeI),title(‘Prewitt梯度图像‘);
sharpI=I+edgeI;
figure;
imshow(sharpI),title(‘Prewitt锐化图像‘);
拉普拉斯算子为二阶微分算子,定义如下:
化简:
模板:
或
拉普拉斯算子对图像增强基本方法
I=im2double(rgb2gray(imread(‘106.jpg‘)));
figure;
imshow(I),title(‘原始图像‘);
H=fspecial(‘laplacian‘,0);%生成拉普拉斯模板
R=imfilter(I,H);%拉普拉斯算子滤波
edgeI=abs(R);%获取拉普拉斯算子滤波图像
figure,imshow(edgeI),title(‘拉普拉斯边缘图像‘)
H1=[0 -1 0;-1 5 -1;0 -1 0];
SharpI=imfilter(I,H1);
figure;
imshow(sharpI),title(‘拉普拉斯锐化图像‘);
一阶微分算子获得的边界是比较粗略的边界,反映的边界信息较少,但是所反映的边界比较清晰;二阶微分算子获得的边界是比较细致的边界。反映的边界信息包括了许多的细节信息,但是所反映的边界不是太清晰。
图像常常受到随机噪声干扰,在其上执行边缘检测的结果常将噪声当作边缘点而检测出来,而真正的边缘则由于受噪声干扰而没能检测出来
用高斯函数
可以证明:
%%LOG算子
I=im2double(rgb2gray(imread(‘106.jpg‘)));
figure;
imshow(I),title(‘原始图像‘);
BW=edge(I,‘log‘);%使用LOG算子进行边缘检测,得到二值边界图像
figure,imshow(BW),title(‘LOG边缘检测‘)
H=fspecial(‘log‘,7,1);%生成7*7的LOG模板,标准差为1
R=imfilter(I,H);
edgeI=abs(R);
figure;
imshow(edgeI),title(‘LOG滤波图像‘);
sharpI=I+edgeI;
figure;
imshow(sharpI),title(‘LOG锐化图像‘);
多级边缘检测算法,被很多人认为是边缘检测最优算法
最优边缘检测的三个主要评价标准:
1)低错误率,更多的实际边缘,更少的噪声误报
2)对边缘的准确定位
3)最小响应,图中的边缘最好只标识一次
主要步骤
1)高斯平滑滤波器卷积降噪
2)平滑后图像的梯度幅值和方向的计算,可采用不同的梯度算子
3)对梯度幅值应用非极大抑制,其过程是找出图像梯度中局部极大值,将其他非局部极大值点置零
4)使用双阈值检测和连接边缘
I=im2double(rgb2gray(imread(‘106.jpg‘)));
figure;
imshow(I),title(‘原始图像‘);
BW=edge(I,‘canny‘);
figure,imshow(BW),title(‘Canny边缘检测‘);
由于图像边缘对应于高频分量,因此图象锐化可采用高通滤波器,关键之处为选择合适的高通滤波系统传递函数
1)理想高通滤波器
2)巴特沃斯高通滤波器
3)指数高通滤波器
标签:
原文地址:http://blog.csdn.net/qq_20602929/article/details/51213314