Bootstrap

《DIP数字图像处理》复习笔记--6.图像分割与描述识别(边缘检测-Canny检测,直线检测-霍夫Hough变换,阈值分割,区域生长分割,图像表达与描述,模式识别概论)

写在前面

DIP-Digital Image Processing-数字图像处理,是计算机图形学和计算机视觉的重要基础,本系列文章是根据“冈萨雷斯《数字图像处理》(第四版)”教材的顺序展开,解释数字图像处理中的重要知识点,同时也可作为期末复习笔记。

  1. 第一、二章 序论、数字图形基础
  2. 第三章 灰度变换与空间滤波
  3. 第四章 频率域滤波
  4. 第六章 彩色图像处理
  5. 第八章 图像编码基础
  6. 第十-十一-十二章 图像分割描述识别
  7. 上机作业

目录

写在前面

图像分割

定义与概念

图像分割的形式化定义(数理逻辑)

点、线、边缘检测 

边缘检测

边缘检测算子

Canny边缘检测

点检测

线检测

Hough变换线检测

原理

为什么要使用霍夫变换

算法

代码示例

边缘、点、线模板的区别

线模板v.s.边缘模板

阈值分割

直方图阈值分割法

方法

​编辑

基本全局阈值处理算法 

方法

Otsu最佳全局阈值处理 

其他方法

区域分割

阈值分割v.s.区域分割

使用分水岭变换的分割

方法

目标表达和描述

图像表达

边界追踪算法

链码

标记图

图像描述

目标识别

总结


图像识别的一般处理过程:

  1. 预处理
  2. 图像分割(按照一定的规则,将一幅图像分割成若干部分或子集。)
  3. 图像描述(用一组数量或符号来表征图像中被描述的目标的基本特征。)
  4. 图像识别(将预处理后的图像,经过图像分割和描述,提取有效的特征,进而加以判决分类。)

图像处理各种算法在本专栏的前5篇都有详细介绍,本文从图像分割算法开始。

图像分割

定义与概念

图像分割:按照一定的规则,将一幅图像分割成若干互不交叠的部分或子集。

分割的一般原则

  • 分割出来的各区域对某种性质而言具有相似性
  • 相邻区域的分割所依据的性质有明显差异
  • 区域边界是明确的。

分割的两种依据(通常):

  • 依据各个像素点的灰度值的不连续性进行分割(根据不连续性定出区域的边界。不同区域边界上的像素具有灰度不连续性跑马圈地 技术:基于点相关的分割技术(基于边界)
  • 依据同一区域具有相似性灰度这一特征,寻求不同区域之边界(根据相似性定出区域像素。区域内部像素一般具有灰度相似性物以类聚 技术:基于区域相关的分割技术(基于区域)

而算法又分为:基于边界的算法基于区域的算法。根据分割过程中的处理策略的不同又可分为并行算法(所有判断和决定都可独立地同时进行)和串行算法(早期处理结果可以被其后的处理过程加以利用)。

图像分割的形式化定义(数理逻辑)

点、线、边缘检测 

f=imread('a.tif');
%Fig.1 点检测
figure(1), imshow(f);
w1=[-1 -1 -1;-1 8 -1;-1 -1 -1];
g1=abs(imfilter(double(f),w1));
T1=max(g1(:)); g1=g1>=T1/2;
%Fig.2 点检测
figure(2), imshow(g1);
w2=[-1 -1 -1;2 2 2;-1 -1 -1];
g2=abs(imfilter(double(f),w2));
T2=max(g2(:)); g2=g2>=T2/2;
%Fig.3 线检测
figure(3), imshow(g2);
w3=[-2 -1 0;-1 0 1;0 -1 -2];
g3=abs(imfilter(double(f),w3));
T3=max(g1(:)); g3=g3>=T3/2;
%Fig.4 边缘检测
figure(4), imshow(g3);

边缘检测

边缘:一个区域的终结和另一个区域的开始,灰度变化比较剧烈的地方。图像边缘有方向幅度两个特征:沿边缘走向的像素变化比较平缓垂直于边缘走向的像素变化剧烈

边缘的一种定义:一阶导数极大值、二阶导数的过零点。

边缘检测的基本准则

  1. 一阶导数比较奇异的地方(例如,比指定的阈值);
  2. 二阶导数有零交叉的地方。

边缘模板

对于模板,具体使用卷积的操作。(具体可见本专栏《2.灰度变换与空间滤波》--线性滤波器) 

边缘模型

边缘检测算子

差分梯度算子

Roberts模板、Sobel模板、Prewitt模板

拉普拉斯算子

模板卷积算子

边缘像素连接的基础是他们之间有一定相似性。使用梯度算子时,可从两方面考察像素的相似性

  1. 梯度幅度
  2. 梯度方向

相邻边缘像素(s,t)和(x,y)可以连接起来,当且仅当他们在梯度方向和幅度方面满足如下两个条件:

其中,T是幅度阈值,A是角度阈值

Canny边缘检测
  1. 使用标准差为sigma高斯滤波器平滑图像;
  2. 计算像素的局部离散梯度和梯度方向
  3. 由梯度大小和梯度方向决定“脊线”,并沿脊线顶部进行追踪(非最大值抑制):将不在脊线顶部的像素的像素值设为零;然后,对脊线像素进行阈值处理(滞后阈值处理):设置两个阈值T1<T2,值大于T2的脊线像素称为强边缘像素,值小于T1的脊线像素称为弱边缘像素
  4. 8-邻接(具体可见本专栏《1.数字图像基础》)弱像素集成到强像素,从弱像素到强像素,执行边缘连接。
[g t]=edge(f,'canny',[T1 T2],sigma);

点检测

点模板\begin{vmatrix} 1&1 &1 \\ 1&-8 &1 \\ 1& 1 & 1 \end{vmatrix}

线检测

线模板: 

Hough变换线检测
原理

霍夫变换是一种用于检测图像中的直线或曲线的技术,尤其适用于边缘检测后的图像中含有直线、圆或其他特定形状的情况。其核心思想是将图像空间中的点转换到参数空间中,以找到形状的几何特征。

直角坐标系和极坐标系之间的变换关系为:

在两种坐标系中,图像的表示形式为:

图像中的一条直线在极坐标中的方程为:

通俗的说,将在xOy平面直角坐标系上的两个点坐标变换到ρOθ坐标系中,若在ρOθ坐标系中有交点,证明这两个点在ρOθ坐标系中可以公用一个坐标参数,即在原xOy坐标系中处于一条直线上。

为什么要使用霍夫变换

在图像中直接检测直线时,若噪声较多或直线被断开,常规的检测方法很难识别出完整的直线。而霍夫变换通过参数空间中的累加来实现对直线的检测,使得在噪声和不完整的情况下仍能识别出线条。

算法
  • 初始化参数空间:设置参数空间中的ρ和θ范围,通常ρ为图像对角线长度,θ范围为[0,π]
  • 遍历图像像素:对于图像中每个边缘点,根据ρ=xcos⁡θ+ysin⁡θ计算不同θ值下的ρ,并在参数空间中记录这些值。
  • 累加计数:在参数空间中对应的(ρ,θ)点上累加,这样共线的点在参数空间会产生较高的计数值
  • 检测直线:在参数空间中找到计数值较高的点,它们对应的参数(ρ,θ)就是图像中的直线参数
代码示例
RGB = imread('gantrycrane.png');

% Convert to intensity. 
I = rgb2gray(RGB);

% Extract edges. 
BW = edge(I,'canny');
[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-90:0.5:89.5);

% Display the original image. 
subplot(2,1,1);
imshow(RGB);
title('Gantrycrane Image');

% Display the Hough matrix. 
subplot(2,1,2);
imshow(imadjust(mat2gray(H)),'XData',T,'YData',R,...
'InitialMagnification','fit');
title('Hough Transform of Gantrycrane Image');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot);

边缘、点、线模板的区别

作用和应用有所不同:

  • 点模板

    • 主要用于检测和增强图像中的点特征
    • 这种模板可以突出局部的高亮点或孤立的像素,用于检测噪声点或增强图像中的孤立亮点。用于孤立点或局部增强
  • 线模板

    • 主要用于检测和增强图像中的线条特征
    • 例如在水平方向上有较大值的线模板,用于增强水平线条或检测图像中的水平边缘。这种模板可以帮助找到特定方向的直线特征,如水平或垂直的边缘。用于检测特定方向的线条
  • 边缘模板

    • 主要用于检测图像的边缘
    • 对角线方向和中央位置的不同权重有助于识别对角方向的边缘信息。用于边缘检测和轮廓提取
线模板v.s.边缘模板

相比于更通用的边缘检测模板(例如Sobel算子、Prewitt算子或Laplacian算子),线模板的方向性更强,可以单独用于某一方向的边缘检测,适合于应用场景中特定方向边缘的提取。

阈值分割

直方图阈值分割法

方法
  1. 作图像的直方图;
  2. 如果灰度级直方图有明显的双峰状,则选择两峰之间的谷底所对应的灰度值作为阈值;
  3. 然后根据如下公式,得到分割图像
  • T为阈值(门限)
  • T=T[ (x,y), f(x,y), q(x,y)] 动态阈值(q(x,y)为领域灰度特性)
  • T=T[ f(x,y) ] 全局阈值
  • T=T[ f(x,y), q(x,y) ] 局部阈值

基本全局阈值处理算法 

方法
  1. 选一个全局阈值T;
  2. 该阈值将图像像素分成两类G1和G2;
  3. 求G1和G2中像素的像素值的平均值m1和m2
  4. 计算一个新阈值T=(m1+m2)/2
  5. 重复2)和4)直到连续两次迭代误差小于一个预定义参数∆T
counter=0;
T=mean2(f);
done=false;
while ~done
    counter=counter+1;
    g=f>T;
    T1=0.5*(mean(f(g))+mean(f(~g)));
    done=abs(T-T1)<0.5;
    T=T1;
end

Otsu最佳全局阈值处理 

选择阈值将像素分为两类,且其类间方差最大。(有些像机器学习中的聚类,类间差距最大)

function [T,SM]=OtsuThresh(G,T1,T2)
    %G是直方图,对T1和T2之间的值求最佳阈值
    g=imhist(G);
    h=double(g(T1+1:T2+1));
    h=h/sum(h);
    i=double((1:numel(h))');
    P1=cumsum(h);
    TT=i.*double(h);
    m=cumsum(TT); mG=m(end);
    sigSquared=((mG*P1-m).^2)./(P1.*(1-P1)+eps);
    maxSigsq=max(sigSquared);
    T=mean(find(sigSquared==maxSigsq));
    T=(T-1)/(numel(h)-1);
    SM=maxSigsq/(sum(((i-mG).^2).*h)+eps);
    T=T1+T*(T2-T1);
    T=fix(T);
end
  • 代码中的SM:可分性测度,越大越好。

其他方法

  • 平滑改进全局阈值处理:阈值处理之前,先进行平滑
  • 边缘改进全局阈值处理:大背景区域上的小目标,在直方图中,受到大波峰的控制(被淹没)。改进方法仅考虑靠近边缘的区域像素直方图
  • 局部统计可变阈值处理:由图像的像素的局部性质决定阈值。
    • 移动平均局部阈值处理:局部统计可变阈值处理的一个特例。像素扫描时(比如Z字形扫描),求像素领域的平均值,以该平均值作为设定阈值的基础。

区域分割

区域增长法:根据相似性准则,直接取出若干个特征相似或相同的像素组成区域

阈值分割v.s.区域分割

阈值分割区域分割是两种常用的图像分割方法,它们都利用图像的某些特性(如灰度、颜色、纹理等)进行分割。主要用于将图像划分成不同的区域以便后续处理。两者在方法和应用上有所不同,但目标都是在图像中识别和分离目标区域。

使用分水岭变换的分割

分水岭算法的基本思想来源于地形地貌。将灰度图像看成一个地形,亮度高的部分为“山峰”,亮度低的部分为“谷地”。从每个谷底开始“灌水”,当水漫至不同区域的交界处时,在水碰到的地方建立“堤坝”。这样,图像就被不同的“堤坝”分割成多个区域。

分水岭分割常用于医学图像、显微图像分析等场景,适合分割具有相似灰度值但结构清晰的物体。可能会导致“过分割”,即生成过多的区域,因此常结合预处理或后处理步骤来优化结果。

方法
  1. 计算梯度图:先计算图像的梯度,以增强边缘信息。梯度大的地方通常是物体的边界。
  2. 标记区域手动或自动标记图像中的前景和背景区域,以便算法知道从哪些地方开始“灌水”。
  3. 分水岭变换:从标记点开始灌水,形成分割区域,直到水相遇并建立分界。

目标表达和描述

图像分割的技术目的是将图像分成有意义的区域,为了达到图像分析的目的,还要对这些有意义的区域进行特征提取与描述。而所谓的图像分析,就是根据图像中的目标的描述数据对其作定性或定量分析,分析的基础是目标区域的特征

图像表达

图像表达能恢复分割区域

用不同于原始图像的信息形式表示已分割出来的目标,为进一步用数据或符号来表征目标的基本特征做准备

  • 区域(根据:内部像素特征):用特殊符号表示区域中的像素即可。
  • 边界(根据:边界像素特征):边界追踪、链码、标记图。

边界追踪算法

%外边界
clear all;
close all;
clc;
img=imread('rice.png');
img=img>128;
imshow(img);
[m n]=size(img);
imgn=zeros(m,n); %边界标记图像
ed=[-1 -1;0 -1;1 -1;1 0;1 1;0 1;-1 1;-1 0]; %从左上角像素判断
for i=2:m-1
	for j=2:n-1
		if img(i,j)==1 %如果当前像素是前景像素
			for k=1:8
				ii=i+ed(k,1);
				jj=j+ed(k,2);
				if img(ii,jj)==0 %当前像素周围如果是背景,边界标记图像相应像素标记
					imgn(ii,jj)=1;
				end
			end
		end
	end
end
figure;imshow(imgn,[]);

链码

链码是图象分割后所得区域的一种表达手段。

标记图

角度的函数的形式表示质心到边界的距离

图像描述

图像描述不能恢复特征区域

用一组数量或符号来表征图像中被描述的目标的基本特征。

描述子方法+数据

边界描述子

  • 几何描述子
    • 面积
    • 周长
      • 交界线长度
      • 8-链码长度
      • 边界点之和
    • 位置
    • 投影:设P_0为f(x,y)在θ方向上的投影,它是一个向量
  • 形状数:归一化链码的第一个差值开始的差值序列
  • 傅里叶描述子
  • 统计矩

区域描述子

  • 偏离度
  • 拓扑描述子
    • 邻接与连通
    • 背景与孔(欧拉数:E=C-H,C连通分支个数,H孔个数)
  • 纹理
  • 不变矩

目标识别

图像识别:将预处理后的图像,经过图像分割和描述,提取有效的特征,进而加以判决分类。图像识别的基本理论和方法是移植于《模式识别》的。

  • 模式:客观事物的特征之描述
  • 模式识别:根据某事物的模式判断该事物属于何类

图像识别的应用实例

  • 邮政系统的信函自动分拣
  • 复杂背景下的军事目标的自动识别
  • 由气象云图结合其他气象数据进行天气预报
  • 用人工地震波形图寻找石油的岩层结构
  • 根据医学x光图像或显微图像分析各种病变
  • ......

模式识别工作主要由三个阶段完成:

  • (一)图像分割(或物体分离)
  • (二)特征抽取和选择
    • 图像识别中,常被选的特征有:
      (1)图像幅度特征:图像像素灰度值;彩色三色值;频谱值
      (2)图像统计特征:直方图特征,统计性特征(均值,方差,能量,熵)
      (3)图像几何特征:面积、周长、分散度(面积/周长),伸长度(面积/宽度)
      (4)图像变换参数:Fourier变换,哈达玛变换
  • (三)决策分析
    • 模式识别的任务是如何做出最优决策分类的问题
      1)统计模式识别方法
      2)句法模式识别方法
      3)模糊集合识别方法
      4)神经网络识别方法
      5)当代机器学识别方法

具体机器学习内容详见《机器学习》专栏;具体模式识别内容详见《模式识别》专栏


总结

图像识别的一般处理过程包括预处理、图像分割、图像描述和图像识别步骤,核心在于提取有效特征并进行分类。图像分割将图像划分成不重叠的区域,分为基于边界和基于区域的算法,还可细分为并行和串行算法。边缘检测常用梯度算子和Canny算法,通过分析灰度变化检测边缘。阈值分割利用直方图灰度信息分割图像,区域分割则通过像素相似性形成区域。图像表达和描述将区域和边界信息提取为符号或数值用于分析,常见的描述方法包括链码和傅里叶描述子。模式识别应用于信件分类、军事目标识别和医学图像分析等场景,主要包括图像分割、特征提取和决策分析。

;