一、Radon变换
参考:Radon 变换
Radon变换是使用一组参数来表示一条直线,当选定某个方向时,那么一副图像可以被变换成的函数的一条直线,具体推导可以参考上述链接
二、直线检测
基于Radon变换的直线检测的目的就是检测根据角度变化时出现的“局部峰值”,即可以确定直线的方向,同时,峰值大小能够确定直线上点的个数,如下图的局部极大值,则有可能是一条直线的位置,当然进行检测之前需要获得图像中的轮廓,而不是直接对图像进行变换
三、代码实现
例如matlab官方的图像进行检测:
进行边缘检测:
然后选择不同的角度与距离,得到了一个二维数组:
其中较亮的点即为局部极大值,也就是第二部分所说的有可能是直线所在的位置
代码:
I = fitsread('solarspectra.fts');
I = rescale(I);
figure
imshow(I)
title('Original Image')
BW = edge(I);
figure
imshow(BW)
title('Edges of Original Image')
theta = 0:179;
[R,xp] = radon(BW,theta);
figure
imagesc(theta, xp, R); colormap(hot);
xlabel('\theta (degrees)');
ylabel('x^{\prime} (pixels from center)');
title('R_{\theta} (x^{\prime})');
colorbar