一、问题描述。
实现第十章中采用hough变换来检测图像中圆的过程。,通过包括平滑(把细节去除),边缘检测(得到轮廓)以及hough变换得到的圆,并把结果叠加到原来的灰度图像上。给出具体的过程,中间结果,最后结果,实现的**,并写出报告。
二、**的获取以及预处理。
针对老师提供的一副硬币**,要求检测出其中的hough圆,并叠加到原图像上以便增强图像。在检测hough圆之前,首先要对图像进行平滑处理,进行拉普拉斯变换,然后检测垂直方向,水平方向,+45度和-45度方向的边缘,将四个方向的边缘叠加起来,得到总的边缘,对该图像进行二值化,然后对得到的图像检测其hough圆,得到圆形边缘,将该图像叠加到原图像上,就实现了图像边缘增强的目的。
3、图像处理算法的基本原理以及处理结果。
本实验流程图如下:
1.读取图像。
图像处理的第一步就是对所采集的图像进行读入,本次实验的输入图像是一幅灰度图像,不需要将图像转换成为灰度图像,直接利用函数imread()完成。
原图像如下所示:
2.图像预处理。
在图像预处理中,我们完成了两步工作,首先使用方差为1的高斯噪声对图像进行平滑,然后进行拉普拉斯变换,即,为方差为的高斯噪声,本实验中。又,其中,将和分别进行傅里叶别换,将其逐点相乘,再进行傅里叶反变换,就得到了预处理后的图像。
3.边缘检测。
对水平,垂直,+45度,-45度方向进行边缘检测,本实验中我们采用了prewitt梯度算子,它用于检测水平方向,垂直方向,+45度方向和-45度方向的掩膜分别如下:
水平掩膜垂直掩膜45度掩膜 -45度掩膜。
使用这四个掩膜分别对上一步得到的图像逐点进行处理,就可以得到四个方向的边缘了(本实验中边缘的一个像素都不处理),再将它们加起来,就得到了总的边缘,实验结果如下:
总的边缘如下图所示:
4.二值化。
对上图得到的图像进行二值化,这里我采用的是循环方式确定图像全局阈值,即首先以图像的平均值作为阈值,将图像分成两部分,分别求两部分的平均值,新的阈值为这两个平均值的均值,重复上述过程,直到两次阈值之差小于特定的值时停止,并以最后一次得到的阈值对图像进行二值化,本实验中我要求两次阈值之差小于0.5时停止,最后得到的全局阈值为 -102.1332,二值化后的图像如下所示:
变换检测圆形边界。
hough 变换的原理就是利用图像全局特征将边缘像素连接起来组成区域封闭边界,它将图像空间转换到参数空间,在参数空间对点进行描述,达到检测图像边缘的目的。该方法把所有可能落在边缘上的点进行统计计算,根据对数据的统计结果确定属于边缘的程度。其实质就是对图像进行坐标变换,把平面坐标变换为参数坐标,使变换的结果更易识别和检测。
hough变换的基本原理在于,利用点与线的对偶性,将图像空间的线条变为参数空间的聚集点,从而检测给定图像是否存在给定性质的曲线。圆的方程为:(x-a)^2+(y-b)^2=r^2,通过hough变换,将图像空间对应到参数空间。
把x-y平面上的圆转换到a-b-r参数空间,则图像空间中过(x, y)点圆对应参数空间中,高度r变化下的一个三维锥面,如下
同理,过图像空间中任意一点的圆对应于参数空间中的一个三维锥面。因此,过图像空间上同一圆上的点,对应的参数空间中的三维锥面,在r高度必然相交于一点(a, b, r)。这样通过检测这一点可以得到圆的参数,相应的圆也可求得了。
图像平面的方程转化为参数平面上的示意图如图所示:
hough变换是基于通过提取分布于目标圆周上的参数及点的特征值的来检测圆或圆弧的。为了检测目标外形,对图像上的每点定义一个参数空间的映射。hough变换通过在参数空间找寻特征(峰值或最大值点)得到位于图像空间中的特征(目标形状)来转换问题。
对于已知半径的圆hough变换可以检测任意已知表达形式的曲线,关键在于选择合适的参数空间。我们可以根据曲线的表达形式决定其参数空间。当检测某一已知半径的圆时,可以使用与原图像空间相同的空间作为其参数空间。
则原图像空间中的一个圆对应参数空间中的一个点,参数空间的一个点对应图像空间中一个圆,原图像空间中在同一圆上的点,它们的参数相同即a,b相同,它们在参数空间对应的圆就会过同一点(a,b),因此,将原图像中的所有点变换到参数空间之后,依据参数空间中点的聚集度就可判断出原图像空间中有无近似于圆的图形。
对于未知半径的圆,在一个xy平面图像中确定一个圆至少需要三个元素,即圆心的x轴和y轴坐标,圆的半径,因此hough变换检测圆的目的就是检测出图像中各个圆的圆心坐标以及圆的半径。其基本思想是将原图像空间中边缘点映射至参数空间中,再将参数空间中得到的全部坐标点元素所对应的累加值进行统计,并根据此累加值来判断圆的大小和圆心的位置。例如,在xy平面上的方程为(x-a)2+(y-b)2=r2 其中点(a,b)为圆心坐标,r为圆半径,点(x,y)为圆周上的一点,将其转换为参数坐标系(a,b,r),方程为(a-x)2+(b-y)2=r2,可看出次方程为圆锥面,对于原图像中任意确定的一个点在参数空间都有一个三维锥面与其对应。
在hough变换检测圆时,可以利用梯度信息在很大程度上加快圆检测的速度。对圆周而言,其梯度方向只有背离圆心或者指向圆心,当梯度指向圆心,圆心就在梯度的延长线上,而当梯度背离圆心,圆心则在梯度的反向延长线上。所以,边缘梯度信息的加入可以预估圆心的位置,这样可以使算法的运算量明显减少,并且可以有效抑制虚假局部最大值。
圆心位置可以用极坐标方程形式表达: a= x - r·co s (θx , y ) a=y - r·sin (θx , y ) 或者a= x+ r·co s (θx , y ) a=y+r·sin (θx , y ) 边缘像素(x,y)处的梯度方向为θ (x , y )。前一组公式是梯度方向背离圆心,后一组为梯度方向指向圆心。
以前一种情况为例,边缘图像中每个边缘像素点(x,y)都可以算出其相应的梯度方向θ (x , y )。通过前一个公式可算出圆心坐标(a0,b0),对于参数空间可能的半径r0,其相应的参数空间累加器单元加一,最后找到累加器的局部最大值,就得到一个圆。
本实验中,我们检测的圆半径范围为10-100,半径步长为1,角度步长为π/18,p=0.7。得到的结果如下:
变换结果与原图像相加。
上一步得到的图像是一副逻辑图像,这一步我们首先判断上一步得到的图像每一个像素是否为1,如果是则相加后该点的像素值为255,否则该点的像素值为原图像在该点的像素值,这样就得到了hough变换后图像与原图像相加的图像,结果如下所示:
4、源程序。
本实验采用matlab来实现,原程序如下所示:
clear all;
1.读入图像并显示。
s=imread('e:\'
figure;imshow(s);title('原图像');
2.引入均值为零,方差为a的高斯噪声对图像进行平滑,然后进行拉普拉斯变换。
m,n]=size(s);
a=1;h=zeros(m,n);
h=double(h);
for i=1:m
for j=1:n
t=i^2+j^2;
h(i,j)=(t-2*a)*exp(-(t/(2*a)))a^2;
endend
h=fftshift(fft2(h));
g=fftshift(fft2(s));
w=h.*g;
w=ifft2(ifftshift(w));
figure;imshow(w);title('平滑后进行拉普拉斯变换后的图像');
%3.对水平,垂直,+45度,-45度方向进行边缘检测,采用prewitt梯度算子。
img=double(w);
h1=zeros(m,n);
h2=zeros(m,n);
g1=zeros(m,n);
g2=zeros(m,n);
for i=2:m-1
for j=2:n-1 h1(i,j)=-img(i-1,j-1)-img(i-1,j)-img(i-1,j+1)+img(i+1,j-1)+img(i+1,j)+img(i+1,j+1h2(i,j)=-img(i-1,j-1)-img(i,j-1)-img(i+1,j-1)+img(i-1,j+1)+img(i,j+1)+img(i+1,j+1); g1(i,j)=img(i-1,j)+img(i-1,j+1)+img(i,j+1)-img(i,j-1)-img(i+1,j-1)-img(i+1,jg2(i,j)=-img(i-1,j-1)-img(i-1,j)-img(i,j-1)+img(i+1,j)+img(i,j+1)+img(i+1,j+1);
endend
figure;imshow(h1);title('水平边缘');
figure;imshow(h2);title('垂直边缘');
figure;imshow(g1);title('-45度边缘');
figure;imshow(g2);title('+45度边缘');
z=zeros(m,n);
for i=1:m
for j=1:n
z(i,j)=h1(i,j)+h2(i,j)+g1(i,j)+g2(i,j);
endend
figure;imshow(z);title('提取的边缘');
4.对提取的边缘进行二值化。
t=sum(z(:)m*n);
t2=20;
while t2>0.5
y1=0;y2=0;
n1=0;n2=0;
n1=double(n1);
n2=double(n2);
y1=double(y1);
y2=double(y2);
for i=1:m
for j=1:n
if(z(i,j)>t)
y1=y1+double(z(i,j));
n1=n1+1;
elsey2=y2+double(z(i,j));
n2=n2+1;
endend
endt1=y1/n1;
t2=y2/n2;
t1=(t1+t2)/2;
t2=abs(t-t1);
t=t1end
gs=zeros(m,n);
for i=1:m
for j=1:n
if z(i,j)>t
gs(i,j)=0;
elsegs(i,j)=255;
endend
endfigure;imshow(gs);title('二值化后的图像');
5.进行hough变换,检测圆形边界。
数字图像处理》期末大作业
即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。命运如同手中的掌纹,无论多曲折,终掌握在自己手中。数字图像处理 期末大作业 1 数字图像处理 期末大作业2014 数字图像处理 期末大作业 1 你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生命运如同...
数字图像处理大作业
1图像变换。1.1实验背景。在数字图像应用领域,图像需要进行分析 变换 压缩或者增强来提高图像的可处理性和视觉效果。其中,图像变换是将图像从空间域变换到频率域,变换的目的是根据图像在变换域的某些性质对其进行处理,而这些性质在空间域难以获取,通常在频率域才能获取,在变换域处理完后再反变换到空间域,恢复...
数字图像处理大作业
图像处理技术。大作业。院 系 物联网工程学院。专业 计算机科学与技术。班级 学号 姓名 摘要。图像分割就是指把图像分成各具特性的区域并提取出感兴趣目标的技术和过程。它是图像处理 模式识别和人工智能等多个领域中的重要课题,也是计算机视觉技术中首要的 重要的关键步骤。图像分割的应用非常广泛,几乎出现在有...