写在前面
DIP-Digital Image Processing-数字图像处理,是计算机图形学和计算机视觉的重要基础,本系列文章是根据“冈萨雷斯《数字图像处理》(第四版)”教材的顺序展开,解释数字图像处理中的重要知识点,同时也可作为期末复习笔记。
- 第一、二章 序论、数字图形基础
- 第三章 灰度变换与空间滤波
- 第四章 频率域滤波
- 第六章 彩色图像处理
- 第八章 图像编码基础
- 第十-十一-十二章 图像分割描述识别
- 上机作业
目录
图像识别的一般处理过程:
- 预处理
- 图像分割(按照一定的规则,将一幅图像分割成若干部分或子集。)
- 图像描述(用一组数量或符号来表征图像中被描述的目标的基本特征。)
- 图像识别(将预处理后的图像,经过图像分割和描述,提取有效的特征,进而加以判决分类。)
图像处理各种算法在本专栏的前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);
边缘检测
边缘:一个区域的终结和另一个区域的开始,灰度变化比较剧烈的地方。图像边缘有方向和幅度两个特征:沿边缘走向的像素变化比较平缓,垂直于边缘走向的像素变化剧烈。
边缘的一种定义:一阶导数极大值、二阶导数的过零点。
边缘检测的基本准则:
- 找一阶导数比较奇异的地方(例如,比指定的阈值大);
- 找二阶导数有零交叉的地方。
边缘模板:
对于模板,具体使用卷积的操作。(具体可见本专栏《2.灰度变换与空间滤波》--线性滤波器)
边缘模型:
边缘检测算子
差分梯度算子
Roberts模板、Sobel模板、Prewitt模板
拉普拉斯算子
模板卷积算子
边缘像素连接的基础是他们之间有一定相似性。使用梯度算子时,可从两方面考察像素的相似性:
- 梯度幅度
- 梯度方向
相邻边缘像素(s,t)和(x,y)可以连接起来,当且仅当他们在梯度方向和幅度方面满足如下两个条件:
其中,T是幅度阈值,A是角度阈值。
Canny边缘检测
- 使用标准差为sigma的高斯滤波器平滑图像;
- 计算像素的局部离散梯度和梯度方向;
- 由梯度大小和梯度方向决定“脊线”,并沿脊线顶部进行追踪(非最大值抑制):将不在脊线顶部的像素的像素值设为零;然后,对脊线像素进行阈值处理(滞后阈值处理):设置两个阈值T1<T2,值大于T2的脊线像素称为强边缘像素,值小于T1的脊线像素称为弱边缘像素。
- 将8-邻接(具体可见本专栏《1.数字图像基础》)的弱像素集成到强像素,从弱像素到强像素,执行边缘连接。
[g t]=edge(f,'canny',[T1 T2],sigma);
点检测
点模板:
线检测
线模板:
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算子),线模板的方向性更强,可以单独用于某一方向的边缘检测,适合于应用场景中特定方向边缘的提取。
阈值分割
直方图阈值分割法
方法
- 作图像的直方图;
- 如果灰度级直方图有明显的双峰状,则选择两峰之间的谷底所对应的灰度值作为阈值;
- 然后根据如下公式,得到分割图像
- 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) ] 局部阈值
例
基本全局阈值处理算法
方法
- 选一个全局阈值T;
- 用该阈值将图像像素分成两类G1和G2;
- 求G1和G2中像素的像素值的平均值m1和m2;
- 计算一个新阈值T=(m1+m2)/2;
- 重复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.区域分割
阈值分割和区域分割是两种常用的图像分割方法,它们都利用图像的某些特性(如灰度、颜色、纹理等)进行分割。主要用于将图像划分成不同的区域以便后续处理。两者在方法和应用上有所不同,但目标都是在图像中识别和分离目标区域。
使用分水岭变换的分割
分水岭算法的基本思想来源于地形地貌。将灰度图像看成一个地形,亮度高的部分为“山峰”,亮度低的部分为“谷地”。从每个谷底开始“灌水”,当水漫至不同区域的交界处时,在水碰到的地方建立“堤坝”。这样,图像就被不同的“堤坝”分割成多个区域。
分水岭分割常用于医学图像、显微图像分析等场景,适合分割具有相似灰度值但结构清晰的物体。可能会导致“过分割”,即生成过多的区域,因此常结合预处理或后处理步骤来优化结果。
方法
- 计算梯度图:先计算图像的梯度,以增强边缘信息。梯度大的地方通常是物体的边界。
- 标记区域:手动或自动标记图像中的前景和背景区域,以便算法知道从哪些地方开始“灌水”。
- 分水岭变换:从标记点开始灌水,形成分割区域,直到水相遇并建立分界。
目标表达和描述
图像分割的技术目的是将图像分成有意义的区域,为了达到图像分析的目的,还要对这些有意义的区域进行特征提取与描述。而所谓的图像分析,就是根据图像中的目标的描述数据对其作定性或定量分析,分析的基础是目标区域的特征。
图像表达
图像表达能恢复分割区域。
用不同于原始图像的信息形式来表示已分割出来的目标,为进一步用数据或符号来表征目标的基本特征做准备。
- 区域(根据:内部像素特征):用特殊符号表示区域中的像素即可。
- 边界(根据:边界像素特征):边界追踪、链码、标记图。
边界追踪算法
%外边界
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-链码长度
- 边界点之和
- 位置
- 投影:设为f(x,y)在θ方向上的投影,它是一个向量。
- 形状数:归一化链码的第一个差值开始的差值序列
- 傅里叶描述子
- 统计矩
区域描述子
- 偏离度
- 拓扑描述子
- 邻接与连通
- 背景与孔(欧拉数:E=C-H,C连通分支个数,H孔个数)
- 纹理
- 不变矩
目标识别
图像识别:将预处理后的图像,经过图像分割和描述,提取有效的特征,进而加以判决分类。图像识别的基本理论和方法是移植于《模式识别》的。
- 模式:客观事物的特征之描述;
- 模式识别:根据某事物的模式判断该事物属于何类。
图像识别的应用实例
- 邮政系统的信函自动分拣
- 复杂背景下的军事目标的自动识别
- 由气象云图结合其他气象数据进行天气预报
- 用人工地震波形图寻找石油的岩层结构
- 根据医学x光图像或显微图像分析各种病变
- ......
模式识别工作主要由三个阶段完成:
- (一)图像分割(或物体分离)
- (二)特征抽取和选择
- 图像识别中,常被选的特征有:
(1)图像幅度特征:图像像素灰度值;彩色三色值;频谱值
(2)图像统计特征:直方图特征,统计性特征(均值,方差,能量,熵)
(3)图像几何特征:面积、周长、分散度(面积/周长),伸长度(面积/宽度)
(4)图像变换参数:Fourier变换,哈达玛变换
- 图像识别中,常被选的特征有:
- (三)决策分析
- 模式识别的任务是如何做出最优决策分类的问题
1)统计模式识别方法
2)句法模式识别方法
3)模糊集合识别方法
4)神经网络识别方法
5)当代机器学识别方法
- 模式识别的任务是如何做出最优决策分类的问题
具体机器学习内容详见《机器学习》专栏;具体模式识别内容详见《模式识别》专栏
总结
图像识别的一般处理过程包括预处理、图像分割、图像描述和图像识别步骤,核心在于提取有效特征并进行分类。图像分割将图像划分成不重叠的区域,分为基于边界和基于区域的算法,还可细分为并行和串行算法。边缘检测常用梯度算子和Canny算法,通过分析灰度变化检测边缘。阈值分割利用直方图灰度信息分割图像,区域分割则通过像素相似性形成区域。图像表达和描述将区域和边界信息提取为符号或数值用于分析,常见的描述方法包括链码和傅里叶描述子。模式识别应用于信件分类、军事目标识别和医学图像分析等场景,主要包括图像分割、特征提取和决策分析。