初学radon变换 检测直线 matlab程序实现

关于Radon变换的原理网上有很多介绍了,这里根据radon变化的结果得到检测出的直线。

以一条直线为例:

 

初学radon变换 检测直线 matlab程序实现_第1张图片

首先对图片进行处理:

srcImage=imread(fileName);
grayImage=rgb2gray(srcImage);
cannyImage=edge(grayImage,'canny',0.45);

初学radon变换 检测直线 matlab程序实现_第2张图片

进行radon变换:

[R,x]=radon(cannyImage,theta);

初学radon变换 检测直线 matlab程序实现_第3张图片

 寻找峰值,可以根据findpeaks函数的用法进行设置变量。

si = size(R);
M=si(1);
N=si(2);
J=reshape(R,M*N,1);
[PKS,LOCS]= findpeaks(J,'THRESHOLD',6);

 

根据峰值计算垂线:

k=tan(true_theata*pi/180); %直线的斜率
b=y0-k*x0;
k2=-1/k;                 %直线垂线的斜率
syms x t f;
t=solve((k*x+b-y0)^2+(x-x0)^2==true_d^2,x);

 再根据垂线得出要检测的直线:

y=k*x_x+b;
b2=y-k2*x_x;      %得到直线截距
x1=0;              %任意求出直线上两点,用于画线
y1=k2*x1+b2;
x2=w;
y2=k2*x2+b2;
line([x1,x2],h-[y1,y2],'color','g','LineWidth',1);  % 在原图上绘出直线

结果:

初学radon变换 检测直线 matlab程序实现_第4张图片

 

整体的代码://download.csdn.net/download/liushangkun/12194414

你可能感兴趣的:(matlab,radon变换)