Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何使用Haar小波检测图像上的线条?_Algorithm_Image Processing_Haar Wavelet_Straight Line Detection - Fatal编程技术网

Algorithm 如何使用Haar小波检测图像上的线条?

Algorithm 如何使用Haar小波检测图像上的线条?,algorithm,image-processing,haar-wavelet,straight-line-detection,Algorithm,Image Processing,Haar Wavelet,Straight Line Detection,所以我有这样一个图像: 我想得到这样的东西(我还没有画出我想要的所有线条,但我希望你能理解我的想法): 我想使用SURF((加速鲁棒特征)是一种鲁棒图像描述符,由Herbert Bay等人于2006年首次提出)或基于2D Haar小波响应和的东西,并有效地利用积分图像查找图像上的所有直线。我想得到相对于图片像素坐标的直线起点和终点 所以在这张图片上找到瓷砖和上面那两条黑线之间的所有线条 是否有这样的代码示例(具有行搜索功能)可以从中开始 你有没有尝试过一个更简单的方法,比如Hough变换来寻

所以我有这样一个图像:

我想得到这样的东西(我还没有画出我想要的所有线条,但我希望你能理解我的想法):

我想使用SURF((加速鲁棒特征)是一种鲁棒图像描述符,由Herbert Bay等人于2006年首次提出)或基于2D Haar小波响应和的东西,并有效地利用积分图像查找图像上的所有直线。我想得到相对于图片像素坐标的直线起点和终点

所以在这张图片上找到瓷砖和上面那两条黑线之间的所有线条

是否有这样的代码示例(具有行搜索功能)可以从中开始


<我喜欢C和C++,但是任何其他的可读代码都可能适用于我=)

< p>你有没有尝试过一个更简单的方法,比如Hough变换来寻找线条?OpenCV中包含了一个用于执行此操作的函数和示例,名为。

以下是应用Hough变换检测线条的完整示例。我正在用MATLAB做这项工作

诀窍是将图像划分为多个区域,并对每个区域进行不同的处理;这是因为您的场景中有不同的“纹理”(墙上部区域的瓷砖与底部较暗区域的瓷砖有很大不同,并且一次性处理图像不会是最佳的)

作为一个工作实例,考虑这一点:

%# load image, blur it, then find edges
I0  = rgb2gray( imread('http://www.de-viz.ru/catalog/new2/Holm/hvannaya.jpg') );
I = imcrop(I0, [577 156 220 292]);     %# select a region of interest
I = imfilter(I, fspecial('gaussian', [7 7], 1), 'symmetric');
BW = edge(I, 'canny');

%# Hough Transform and show accumulated matrix
[H T R] = hough(BW, 'RhoResolution',2, 'Theta',-90:0.5:89.5);
imshow(imadjust(mat2gray(H)), [], 'XData',T, 'YData',R, ...
       'InitialMagnification','fit')
xlabel('\theta (degrees)'), ylabel('\rho')
axis on, axis normal, colormap(hot), colorbar, hold on

%# detect peaks
P  = houghpeaks(H, 20, 'threshold',ceil(0.5*max(H(:))));
plot(T(P(:,2)), R(P(:,1)), 'gs', 'LineWidth',2);

%# detect lines and overlay on top of image
lines = houghlines(BW, T, R, P, 'FillGap',50, 'MinLength',5);
figure, imshow(I), hold on
for k = 1:length(lines)
    xy = [lines(k).point1; lines(k).point2];
    plot(xy(:,1), xy(:,2), 'g.-', 'LineWidth',2);
end
hold off


您可以对其他区域尝试相同的过程,同时调整参数以获得良好的结果。

二维小波变换使用软件包在R中实现。具体来说,函数dwt2D()使用C“后端”来提高速度。然后,您可以应用阈值来查找线条。

可能重复的线条