预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

clc;clear; %%录入图像并显示 f=imread('D:\Study\文档\桌面文档\1.jpg');%读入彩色图像,注意不能使用灰度图像 o=f;%保留彩色原图 f=rgb2gray(f);%将彩色图像转换为灰度图像, f=im2double(f); figure(); subplot(2,2,1);imshow(o);title('原图'); %%提取图像边缘 [m,n]=size(f);%得到图像矩阵行数m,列数n fori=3:m-2 forj=3:n-2%处理领域较大,所以从图像(3,3)开始,在(m-2,n-2)结束 l(i,j)=-f(i-2,j)-f(i-1,j-1)-2*f(i-1,j)-f(i-1,j+1)-f(i,j-2)-2*f(i,j-1)+16*f(i,j)-2*f(i,j+1)-f(i,j+2)-f(i+1,j-1)-2*f(i+1,j)-f(i+1,j+1)-f(i+2,j);%LoG算子 end end subplot(2,2,2);imshow(l);title('LoG算子提取图像边缘'); %%滤波 [m,n]=size(l); fori=2:m-1 forj=2:n-1 y(i,j)=l(i-1,j-1)+l(i-1,j)+l(i-1,j+1)+l(i,j-1)+l(i,j)+l(i,j+1)+l(i+1,j-1)+l(i+1,j)+l(i+1,j+1); y(i,j)=y(i,j)/9;%LoG算子提取边缘后,对结果进行均值滤波以去除噪声,为下一步hough变换提取直线作准备 end end subplot(2,2,3);imshow(y);title('均值滤波器处理后') %%二值化 q=im2uint8(y); [m,n]=size(q); fori=1:m forj=1:n ifq(i,j)>80;%设置二值化的阈值为80 q(i,j)=255;%对图像进行二值化处理,使图像边缘更加突出清晰 else q(i,j)=0; end end end subplot(2,2,4);imshow(q);title('二值化处理后'); %%检测直线 %Hough变换检测直线,使用(a,p)参数空间,a∈[0,180],p∈[0,2d] a=180;%角度的值为0到180度 d=round(sqrt(m^2+n^2));%图像对角线长度为p的最大值 s=zeros(a,2*d);%存储每个(a,p)个数 z=cell(a,2*d);%用元胞存储每个被检测的点的坐标 fori=1:m forj=1:n%遍历图像每个点 if(q(i,j)==255)%只检测图像边缘的白点,其余点不检测 fork=1:a p=round(i*cos(pi*k/180)+j*sin(pi*k/180));%对每个点从1到180度遍历一遍,取得经过该点的所有直线的p值(取整) if(p>0)%若p大于0,则将点存储在(d,2d)空间 s(k,d+p)=s(k,d+p)+1;%(a,p)相应的累加器单元加一 z{k,d+p}=[z{k,d+p},[i,j]'];%存储点坐标 else ap=abs(p)+1;%若p小于0,则将点存储在(0,d)空间 s(k,ap)=s(k,ap)+1;%(a,p)相应的累加器单元加一 z{k,ap}=[z{k,ap},[i,j]'];%存储点坐标 end end end end end %%显示效果 fori=1:a forj=1:d*2%检查每个累加器单元中存储数量 if(s(i,j)>70)%将提取直线的阈值设为70 lp=z{i,j};%提取对应点坐标 fork=1:s(i,j)%对满足阈值条件的累加器单元中(a,p)对应的所有点进行操作 o(lp(1,k),lp(2,k),1)=255;%每个点R分量=255,G分量=0,B分量=0 o(lp(1,k),lp(2,k),2)=0; o(lp(1,k),lp(2,k),3)=0;%结果为在原图上对满足阈值要求的直线上的点赋红色 end end end end figure,imshow(o);title('hough变换提取直线');