关于Radon变换的原理网上有很多介绍了,这里根据radon变化的结果得到检测出的直线。
以一条直线为例:
首先对图片进行处理:
srcImage=imread(fileName);
grayImage=rgb2gray(srcImage);
cannyImage=edge(grayImage,'canny',0.45);
进行radon变换:
[R,x]=radon(cannyImage,theta);
寻找峰值,可以根据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); % 在原图上绘出直线
结果:
整体的代码://download.csdn.net/download/liushangkun/12194414