图像边缘检测基于matlab Zernike矩亚像素边缘检测含Matlab源码 1536期

Posted 紫极神光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像边缘检测基于matlab Zernike矩亚像素边缘检测含Matlab源码 1536期相关的知识,希望对你有一定的参考价值。

一、获取代码方式

**获取代码方式1:**私信博主

获取代码方式2:已上传CSDN,平台审核中

二、插值法亚像素边缘检测简介

1 引言
数字图像的边缘检测是图像分割、目标识别、区域形状提取等图像处理领域的重要基础。在进行图像理解和分析时,第一步往往是边缘检测。目前边缘检测已经成为机器视觉领域最活跃的课题之一,其研究具有非常重要的理论意义和实际应用价值。传统的边缘检测方法的检测精度最高只能达到一个像素级,但是,随着科学技术的飞速发展,工业检测等应用对精确度的要求不断提高,传统的像素级边缘检测方法已经不能满足实际测量的需要,本文重点介绍的亚像素边缘检测能将检测精度提高到亚像素级别。

2 主题

2.1 亚像素定位原理
亚像素是将像素这个基本单位再进行细分,它是比像素还小的单位,从而提高了图像分辨率。通常情况下,亚像素边缘点存在于图像中逐渐发生过度变化的区域,我们可以利用多项式拟合等多种方法获得边缘点的亚像素位置。亚像素定位可以理解为在摄像系统硬件条件不变的情况下,用软件算法来提高边缘检测精度的方法,或者说是一种可以使分辨率小于一个像素的图像处理技术。
亚像素定位技术的应用具有一定的前提条件:1、被检测目标不是由孤立的、单个的像素点组成,而是由多个像素点组成,且这些像素点应具有一定的分布特性,如灰度分布、几何形状分布特性等;2、一般情况下,不同的目标都具有各自的特征,主要包括基于目标的灰度分布特征、几何形状特征、几何与灰度耦合特征等,能够分析并利用已知的目标特征,通过对被检测目标图像的分析、识别,最后确定出目标的准确位置。在此分析定位的过程中,采用浮点运算对目标图像进行定位,得到的目标定位精度高于整像素级的定位精度。这种利用目标特性从图像中分析,计算出最符合此特征的目标位置的方法称为图像目标亚像素定位技术。

2.2 亚像素定位国内外发展现状
目前研究的亚像素级的边缘检测算法,可以归纳为3种类型:矩方法、插值法和拟合法。

2.2.1 矩方法
Tabatabai等首先提出一种利用前三阶灰度矩对边缘进行亚像素边缘定位的算法 ,随后基于空间矩、Zernike正交矩的方法也相继被提出。Zernike矩的方法由于只需要计算3个模板,计算量比空间矩的方法要小得多。但是 ,这些方法都是针对理想边缘模型提出的。Shan等对矩方法进行了改进,使用了模糊边缘模型,更能真实反映边缘信息。矩方法的优点是计算简便,并且可以得到解析解。但是矩方法对图像噪声敏感,如果考虑模糊后的边缘模型,就会增加模型参数,使得解析解的确定变得十分困难。

2.2.2 插值法

插值法的核心是对像素点的灰度值或灰度值的导数进行插值,增加信息,以实现亚像素边缘检测。其中,研究比较多的方法有二次插值、B样条插值和切比雪夫多项式插值等。插值类的运算时间短,二次插值算法简单,可以通过硬件实现,适合在线检测。当光学系统的线扩散函数对称时,插值边缘检测的精度较高。插值法的特点同基于矩的方法类似,计算过程简单,但是容易受噪声的影响。

2.2.3 拟合法
拟合方法是通过对假设边缘模型灰度值进行拟合来获得亚像素的边缘定位。Nalwa等给出一种边缘模型为双曲正切函数的最小二乘拟合算法;Ye等提出的算法所用的边缘模型是理想边缘模型与高斯函数卷积得到的高斯型边缘函数。这两种算法都能提供较高的亚像素边缘定位精度。由于拟合不需要数值微分,而且按各灰度值到拟合曲线的距离最小进行拟合,不但合理地利用了有误差的灰度值,又可以减小灰度值误差的影响,因此拟合方法对噪声不敏感。但因模型复杂,其求解速度慢。

2.2.4 相关改进算法

1 基于改进形态学梯度和Zernike矩的亚像素边缘检测方法
该算法先利用改进的数学形态学梯度算子进行边缘点的粗定位,在像素级上确定边缘点的坐标和梯度方向;然后再根据构造的边缘点向量和参考阈值,用Zernike矩算法对边缘点进行亚像素的重新定位,实现图像的亚像素边缘检测。这种复合的图像边缘亚像素检测算法,能够很好地融合数学形态学梯度算子及Zernike矩算法的优点,具备良好的抗噪性能与亚像素精确定位能力,其计算量相对较少,能快速实现CCD图像测量系统的亚像素边缘检测。此外,由于一般测量图像简单且对比度高,若采用适当的模板窗口,该算法可具有良好的处理效率,能够满足一般图像测量系统的实时性、亚像素精确测量要求,具备良好的应用前景。

2 基于改进的形态学梯度的样条插值亚像素边缘检测方法
此改进方法是将改进的形态学梯度滤波算子与三次样条插值法结合起来进行边缘检测,首先利用改进的数学形态学梯度滤波算子进行边缘点的粗定位,得到图像的像素级边缘;然后再利用三次样条插值法对提取出的边缘图像进行插值运算,即亚像素精定位。最后将插值后的边缘进行细化,可得到亚像素级边缘图像。

3 基于贝塞尔边缘模型的亚像素边缘检测算法

该算法首先在原有的贝塞尔点扩散函数中引入修正参数 t,并与理想边缘模型卷积,获得可修正的贝塞尔边缘灰度模型;然后,利用图像边缘的信息对该模型进行最小二乘拟合,在拟合过程中,通过修正参数 t 对边缘模型进行修正,最终获得精确的边缘模型 ,同时考虑数字采样等因素对灰度分布的影响,得到图像边缘的亚像素位置。
关于亚像素边缘检测的改进算法还有很多,如胡树杰提出的图像亚像素检测新方法,提出了一种改进的基于正交傅里叶变换的新方法,提高了部分数字图像的亚像素边缘检测的准确性。陆凯等提出的一种快速的亚像素图像配准算法,速度较类似算法速度有较大的提高,等等。

3 总结
通常情况下,提高检测系统精度最直接的方法是提高摄像机的硬件分辨率,但价格相当昂贵。如果将512×512的摄像机分辨率提升到1024×1024,会相差几倍,甚至十几倍的价格,同时,系统的图像存储容量和图像传输速度都要随之提升,否则会造成硬件方面的不匹配。因此,通过提高硬件分辨率来提高测量系统精度的方法是不经济的,同时在各种视觉系统应用中还受到一定的限制。因此,研究利用软件处理的方法来提高测量系统的检测精度,即亚像素边缘检测方法,具有十分重大的意义。
采用多种算法相结合是提高检测精度的一个思路,如形态学和Zernike矩, 改进的形态学梯度和样条插值等。

在亚像素边缘检测方面,前人已经做了很多工作,但往往只对某些特定领域比较有效,通用的方法还是比较少,不同领域还需运用不同方法。

三、部分源代码

function zernike7(I)

I=imread('2.jpg');

% 7*7Zernike模板
M00=...
[
       0	0.0287	0.0686	0.0807	0.0686	0.0287	0
    0.0287	0.0815	0.0816	0.0816	0.0816	0.0815	0.0287
    0.0686	0.0816	0.0816	0.0816	0.0816	0.0816	0.0686
    0.0807	0.0816	0.0816	0.0816	0.0816	0.0816	0.0807
    0.0686	0.0816	0.0816	0.0816	0.0816	0.0816	0.0686
    0.0287	0.0815	0.0816	0.0816	0.0816	0.0815	0.0287
       0	0.0287	0.0686	0.0807	0.0686	0.0287	0
];
M11R=...
[
       0	-0.015	-0.019	0	0.019	0.015	  0
    -0.0224	-0.0466	-0.0233	0	0.0233	0.0466	0.0224
    -0.0573	-0.0466	-0.0233	0	0.0233	0.0466	0.0573
    -0.069	-0.0466	-0.0233	0	0.0233	0.0466	0.069
    -0.0573	-0.0466	-0.0233	0	0.0233	0.0466	0.0573
    -0.0224	-0.0466	-0.0233	0	0.0233	0.0466	0.0224
       0	-0.015	-0.019	0	0.019	0.015	  0
];
M11I=...
[
       0	-0.0224	-0.0573	-0.069	-0.0573	-0.0224	  0
    -0.015	-0.0466	-0.0466	-0.0466	-0.0466	-0.0466	-0.015
    -0.019	-0.0233	-0.0233	-0.0233	-0.0233	-0.0233	-0.019
       0	   0	   0	   0	   0	   0	  0
    0.019	0.0233	0.0233	0.0233	0.0233	0.0233	0.019
    0.015	0.0466	0.0466	0.0466	0.0466	0.0466	0.015
       0	0.0224	0.0573	0.069	0.0573	0.0224	  0
];
M20=...
[
       0	0.0225	0.0394	0.0396	0.0394	0.0225	0
    0.0225	0.0271	-0.0128	-0.0261	-0.0128	0.0271	0.0225
    0.0394	-0.0128	-0.0528	-0.0661	-0.0528	-0.0128	0.0394
    0.0396	-0.0261	-0.0661	-0.0794	-0.0661	-0.0261	0.0396
    0.0394	-0.0128	-0.0528	-0.0661	-0.0528	-0.0128	0.0394
    0.0225	0.0271	-0.0128	-0.0261	-0.0128	0.0271	0.0225
       0	0.0225	0.0394	0.0396	0.0394	0.0225	0
];


if length(size(I))==3 I=rgb2gray(I); end
I=im2bw(I,0.6);
K=double(I);
[m n]=size(K);

ys=double(zeros(m,n));

% 卷积运算
A11I=conv2(M11I,K);
A11R=conv2(M11R,K);
A20=conv2(M20,K);

% 截掉多余部分
A11I=A11I(4:end-3,4:end-3);
A11R=A11R(4:end-3,4:end-3);


J=zeros(size(K));
boundary=J;
theta=atan2(A11I,A11R);%计算theta

%计算边缘的三个参数
A11C=A11R.*cos(theta)+A11I.*sin(theta);
l=A20./A11C;
k=1.5*A11C./((1-l.^2).^1.5);
e=abs(l)>1/3.5;
k(e)=0;

%边缘判断条件
a=abs(l)<1/sqrt(2)*2/7;
b=abs(k)>max(I(:))/10;
% a,b分别为距离和边缘强度判断结果
J(a&b)=1;
%将图像的最边缘去除
% boundary(2:end-1,2:end-1)=1;
% J(~boundary)=0;

% [x,y]=find(J==1);%边缘的像素级坐标
% O=[x y];
% Z=[x+l(find(J==1)).*cos(theta(find(J==1))) y+l(find(J==1)).*sin(theta(find(J==1)))];%亚像素坐标
% % fprintf('%.4f %.4f\\n',Z');

[L,num]=bwlabel(J,8);%对二值图像进行标记
%自动化搜索连通域
s=zeros(1,num);
for i=1:num
   s(i)=size(find(L==i),1);
end
[bwL,label]=sort(s,'descend');
if label(1)<label(2)
    index1=label(1);
    index2=label(2);
else
    index1=label(2);
    index2=label(1);
end

四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

以上是关于图像边缘检测基于matlab Zernike矩亚像素边缘检测含Matlab源码 1536期的主要内容,如果未能解决你的问题,请参考以下文章

图像处理基于Zernike矩的亚像素边缘检测理论及MATLAB实现

Zernike矩之边缘检测(附源码)

图像边缘检测基于matlab灰度图像的积累加权边缘检测含Matlab源码 2010期

边缘检测基于matlab八方向sobel图像边缘检测含Matlab源码 1865期

图像的亚像素边缘检测 MATLAB代码

用matlab如何通过图像分割来检测边界