数字图像处理笔记(7)

图像分割与边缘检测


前言

  • 本篇博客整理了数字图像处理课程中课件第5章的知识笔记。
  • 相关材料见:DIP-Notes

知识网络图

1

其他重点参考

阈值分割

  • 全局阈值(选取的阈值仅与各像素点的灰度值有关)

    • 极小点阈值法
    • 迭代阈值法
    • 最优阈值法
    • Otus法
  • 局部阈值(像素本身+局部性质

    • 直方图变换法

      利用像素的某种局部性质,将原来的直方图变换成具有更深波谷的直方图,或者使波谷变换为波峰,使谷点或峰点更容易检测。

      注:目标与背景内部像素的梯度小,而目标与背景之间的边界像素的梯度大。

    • 散射图:散射图可以看成一个二维直方图,横轴表示灰度值,纵轴表示某种局部性质(如梯度)

  • 动态阈值(像素本身+局部性质+位置

    • 优点(相比于单一全局阈值):图像背景的灰度值并不恒定,目标与背景的对比度在图像中也会有变化,图像还可能存在不同的阴影,单一阈值效果不好。
    • 由此引出动态阈值——阈值随着位置的不同而变化,将图像划分为一系列子图像,不同区域采用不用的阈值进行分割。

边缘检测

1

[填空题]

  • 一阶导数的幅度值可用来检测边缘的存在
  • 通过检测二阶导数的过零点可以确定边缘的中心位置
  • 利用二阶导数在过零点附近的符号可以确定边缘像素位于边缘的暗区还是亮区

微分算子

图像的边缘是图像最基本的特征,它是灰度不连续的结果。通过计算一阶导数或二阶导数可以方便地检测出图像中每个像素在其邻域内的灰度变化,从而检测出边缘。

微分算子的用途,一为图像锐化,二为检测边缘,其都是对图像灰度不连续部分(边界或细节)进行处理。

  • 常用的梯度算子

    1

  • 高斯-拉普拉斯(LOG)算子

    • 拉普拉斯算子一般不直接用于边缘检测,因为它作为一种二阶微分算子对噪声相当敏感,常产生双边缘,且不能检测边缘方向。主要利用拉普拉斯算子的过零点性质确定边缘位置,以及根据其值的正负来确定边缘像素位于边缘的暗区还是明区。

    • 具体步骤:

      1)高斯平滑抑制噪声

      2)拉普拉斯运算,通过检测过零点确定边缘位置

    • 优点:LOG算子则能提取对比度比较弱的边缘,且边缘定位精度高。

  • Canny边缘检测算子:相比于Robert, Sobel算子,Canny算子边缘检测更加完整。

分水岭算法

  • 分水岭分割算法(Watershed Segmentation Algorithm)把地形学和水文学的概念引入到基于区域的图像分割中,特别适合粘连区域的分割。

  • 分水岭分割算法的主要目的就是找出集水盆地之间的分水线

    • 降雨法(Rainfall)

      降雨法的基本思想是:

      • 首先找出图像中的低洼,给每个低洼赋予不同的标记;
      • 落在未标记点上的雨水将流向更低的邻点,最终到达一个低洼,将低洼的标记赋予该点;
      • 如果某点的雨水可能流向多个低洼,则标记为分水线点。所有点处理完毕后,就形成了不同标记的区域和区域之间的分水线。
    • 淹没法(Flooding)

      淹没法的基本思想是:

      • 假想每个低洼都有一个洞,把整个地形逐渐沉入湖中,则处在水平面以下的低洼不断涌入水流,逐渐填满与低洼相关的集水盆地;当来自不同低洼的水在某些点将要汇合时,即水将要从一个盆地溢出时,就在这些点上筑坝(Dam Construction),阻止水流溢出;
      • 当水淹没至地形最高点时,筑坝过程停止;
      • 最终所有的水坝就形成了分水线,地形就被分成了不同的区域或盆地。

      最简单的筑坝方法就是形态膨胀。从最低灰度开始,逐灰度级膨胀各低洼,当膨胀结果使得两个盆地汇合时,标记这些点为分水线点。膨胀被限制在连通区域内,最后的分水线就把不同的区域分开了。

方向码

1


重点习题与解答

附件:数字图像处理:部分课后习题参考答案.doc.

第5章

  1. 设一幅二值图像中含有水平、垂直、倾斜45°和135°的各种直线,设计一组可以用来检测这些直线中单像素间断的3×3模板。
  2. 证明类间方差最大法与类内方差最小法确定的阈值相同。
  3. 如果图像背景和目标灰度均为正态分布,其均值分别为μ和ν,而且图像与背景面积相等,试确定其最佳阈值。
  4. 编写利用哈夫变换实现直线检测的程序。

参考答案

  1. 参见下图:

    1

  2. Otus法(最大类间方差法 / 大津法)

    因为类间方差与类内方差之和即整幅图像的方差,是一个常数。分割的目的就是要使类别之间的差别最大,类内之间的差别最小。

  3. 由教材P164,式(7-13)可知:

    当图像与背景面积相等时,P1 = P2,故T = (μ + v) / 2.

  4. 参考如下:

    //设参数a和b的可能取值范围为[a0,a1…am-1]和[b0,b1…bn-1]
    //初始化累加数组
    int A[m][n];
    int nearest b;
    int nearest(double x,int B[n]){
    	double result[n];
    for b in B[n]
    		result[i] = B[i]-b;
    	int small = result[n].getIndexofSmall();
    	return small;
    }
    for: (xk,yk)
    	for: a in [a0,a1…am-1]
    nearestb = nearest(-xk*a+yk,B[n]);
    		A[i][nearestb]++;
    for A[m][n]
    	int result = A[i][j].large;