前言
边缘检测是检测图像特性发生变化的位置。不同的图像灰度不同,边界处会有明显的边缘,利用此特征可以分割图像。边缘检测分割法是通过检测出不同区域边界来进行分割的。边缘总是以强度突变的形式出现,可以定义为图像局部特性的不连续性,如灰度的突变和纹理结构的突变等。图像的边缘包含了物体形状的重要信息,它不仅在分析图像时大幅度地减少了要处理的信息量,而且还保护了目标的边界结构。
边缘检测是利用物体和背景在某种图像特性上的差异来实现的。常见的边缘检测方法有微分算子、Canny 算子和LOG 算子等。常用的微分算子有 Sobel 算子、Roberts 算子和 Prewit 算子等。
1.线段检测
1.1 代码
主函数
set(0,'defaultfigurecolor','w')
I=imread('gantrycrane.png');
figure(1)
imshow(I)
saveas(gcf,'原始图像','jpg')
I=rgb2gray(I);
h1=[-1, -1, -1; 2, 2, 2; -1, -1, -1];
I1=uint8(zeros(size(I,1),size(I,2)));
for i=1+1:size(I,1)-1
for j=1+1:size(I,2)-1
I1(i,j)=chengzi(h1,I(i-1:i+1,j-1:j+1));
end
end
figure(2)
subplot(2,2,1)
imshow(I1)
title('水平线段')
h2=[-1, -1, 2; -1, 2, -1; 2, -1, -1];
I2=uint8(zeros(size(I,1),size(I,2)));
for i=1+1:size(I,1)-1
for j=1+1:size(I,2)-1
I2(i,j)=chengzi(h2,I(i-1:i+1,j-1:j+1));
end
end
subplot(2,2,2)
imshow(I2)
title('+45°线段')
h3=[-1, 2, -1; -1, 2, -1; -1, 2, -1];
I3=uint8(zeros(size(I,1),size(I,2)));
for i=1+1:size(I,1)-1
for j=1+1:size(I,2)-1
I3(i,j)=chengzi(h3,I(i-1:i+1,j-1:j+1));
end
end
subplot(2,2,3)
imshow(I3)
title('垂直线段')
h4=[2, -1, -1; -1, 2, -1; -1, -1, 2];
I4=uint8(zeros(size(I,1),size(I,2)));
for i=1+1:size(I,1)-1
for j=1+1:size(I,2)-1
I4(i,j)=chengzi(h4,I(i-1:i+1,j-1:j+1));
end
end
subplot(2,2,4)
imshow(I4)
title('-45°线段')
saveas(gcf,'线段检测','jpg')
相关计算函数
function s=chengzi(A,B)
A=double(A);
B=double(B);
s=0;
for i=1:size(A,1)
for j=1:size(A,2)
s=s+A(i,j)*B(i,j);
end
end
end
1.2计算结果