【图像检测】基于LSD算法直线检测matlab代码

【图像检测】基于LSD算法直线检测matlab代码
1 简介提出了一种中国象棋棋盘角点检测的算法.首先采用LSD算法检测出棋盘灰度图像中的大部分直线,然后通过使用基于灰度值区域的投影直方图和基于LSD算法的直线交点检测两种方法,精确地检测出象棋棋盘的角点.最后通过实验,验证了算法的有效性和实时性,对于棋盘的亮度变化、棋盘畸变和边缘模糊具有良好的适应性.​通过观察 LSD 算法的结果可以发现棋盘角点大部分都是位于棋盘边线的交点或者交点附近所 以可以通过检测出的直线求得这些直线的交点从而确定象棋棋盘角点的位置首先在 LSD 算法检测出的棋盘上的直线后从直线方向的分布上知道棋盘中信息点( 图 1( a) 中标出的两个点称之为信息点) 处于一些斜线的交点处而且棋盘上其他角点处于方向位于 90 度180 度左右直线的交点上因此可以通过对 LSD 算法检测出的直线进行分组先求出这些斜线的交点即信息点的准确位置然后通过这两个点的位置可以大致确定棋盘其他角点的近似位置由于这些直线的信息都是已知的那么可以找到这些近似位置附近直线的交点另外由信息点得到的近似位置是比较接近真实棋盘角点的位置所以找到距离近似位置最近的交点的位置即为棋盘角点的位置2 部分代码%{ Finds the angles and the gradients of the image. Generates a list of pseudo ordered points. * * param scaled_image the image after guassian blur and resize * param threshold The minimum value of the angle that is considered defined, otherwise NOTDEF * param n_bins The number of bins with which gradients are ordered by, using bucket sort. * param list Return: Vector of coordinate points that are pseudo ordered by magnitude. * Pixels would be ordered by norm value, up to a precision given by max_grad/n_bins. %} %list [y, x, gradient] ordered by gradient %angles modgrad: img_height * img_width matrix function [angles, modgrad, list] ll_angle(scaled_image, threshold, n_bins) [height, width, dim] size(scaled_image); % [modgrad,angles] imgradient(scaled_image); % max_grad max(max(modgrad)); % define arrays for store angles and gradient angles zeros(height, width); modgrad zeros(height, width); %Undefined the down and right boundaries angles(height, :) -1024.0; angles(:, width) -1024.0; max_grad -1; %Computing gradient for remaining piexls for y 1 : height-1 for addr 1 : width-1 % DA (scaled_image(y1, addr1) - scaled_image(y, addr)); % BC (scaled_image(y1, addr) - scaled_image(y, addr1)); DA (scaled_image(y1, addr1) - scaled_image(y, addr)); BC (scaled_image(y1, addr) - scaled_image(y, addr1)); gx DA BC; % gx double(gx); gy DA - BC; % gy double(gy); norm sqrt((gx^2 gy^2)/4); modgrad(y, addr) norm; %set angles to nodefine for small gradient if norm threshold angles(y, addr) -1024.0; else angles(y, addr) atan2(gx,-gy); if norm max_grad max_grad norm; end end end end %computing histogram of gradient values count 1; if max_grad 0 bin_coef (n_bins - 1) / max_grad; else bin_coef 0; end unsorted_list zeros(height*width,3); for y 1 : height for x 1 : width if x width y height i modgrad(y, x) * bin_coef; else i -1024; end unsorted_list(count, 1) y; unsorted_list(count, 2) x; unsorted_list(count, 3) i; count count1; end end % list unsorted_list; % sort [a, index] sort(unsorted_list(:,3),descend); list unsorted_list(index, [1,2 ,3]); % % figure, imshow(angles); % figure, imshow(modgrad); %3 仿真结果4 参考文献[1]段汕, 贺兴, 娄联堂, 徐文, 罗敬. (2013). 一种基于灰度投影的中国象棋棋盘角点检测算法. 中南民族大学学报自然科学版, 32(4), 5.**部分理论引用网络文献若有侵权联系博主删除。**