图像分割
学习《数字图像处理与计算机视觉》第九章
- 图像分割
1.图像的不连续性(根据图像灰度的不连续变化分割图像):边缘检测,边界跟踪,hough变换
2.图像的相似性(根据事先制定的准则将图像分割为相似的区域):区域生长,区域分裂与合并,阈值分割
- 边缘检测
边缘点是指图像中周围像素灰度有阶跃变化的那些像素点,也就是灰度值导数较大的地方。
边缘检测的基本步骤:原始图像——(平滑滤波)——平滑图像——(锐化滤波)——锐化图像——(边缘判定)——二值图像——(边缘连接)——边缘图像
边缘检测的基本算法:1.基于查找的算法(寻找图像一阶导数中的最大和最小来检测边界,通常将边界定位在梯度最大的方向)
前面介绍过一阶导数的算子有Roberts算子,Sobel算子,Prewitt算子等他们都是梯度算子
Roberts算子(利用局部差分算子寻找边缘边缘定位精度高,但容易丢失一部分边缘
Sobel算子和Prewitt算子对图像先做加权平滑处理,然后再做微分运算。
2.基于零穿越的算法(寻找图像二阶导数零穿越来寻找边界,通常是拉普拉斯过零点或者非线性差分过零点)
二阶导数主要是高斯—拉普拉斯边缘检测算子(简称LOG算子,也成为Marr边缘检测算子)。
前面的几种都是基于微分方法的边缘检测算法,他们都是只有在图像不含噪声或者通过平滑去除噪声的前提下才能正常使用。
3.此外还有Canny边缘检测算法和统计判别方法。
在图像的而边缘检测中,抑制噪声和边缘的精确定位是无法同时满足的,Canny算子力图在抗噪声干扰和精确定位之间寻求最佳折衷。
它的基本思想就是首先对图像选择一定的Gauss滤波器进行平滑滤波,然后采用非极值抑制技术进行处理得到最后的边缘图像。
1.基于梯度算子的边缘检测
BW=edge(I,type,thresh,direction,'nothinning')
说明:thresh是敏感度阈值参数,默认值是空矩阵。direction指定了我们感兴趣的边缘方向,horizontal水平方向,vertical竖直方向,both所有方向。
2.基于高斯—拉普拉斯算子的边缘检测
BW=edge(I,'log',thresh,sigma)
3.基于Canny算子的边缘检测
BW=edge(I,'canny',thresh,sigma)
代码实现:
intensity=imread('1.jpg');
intensity = rgb2gray(intensity);%把彩色图片转换成灰度图
bw1=edge(intensity,'sobel');
bw2=edge(intensity,'prewitt');
bw3=edge(intensity,'roberts');
bw4=edge(intensity,'log');
bw5=edge(intensity,'canny');
subplot(3,2,1):imshow(intensity);title('a');
subplot(3,2,2):imshow(bw1);title('b');
subplot(3,2,3):imshow(bw2);title('c');
subplot(3,2,4):imshow(bw3);title('d');
subplot(3,2,5):imshow(bw4);title('e');
subplot(3,2,6):imshow(bw5);title('f');
附原图