所以,我有一个图像是这样的:

“CG生成的浴室”

我想是这样的(我还没有得出我希望所有的行,但我希望你能得到我的想法):

“黑白CG生成与瓷砖之间的一些红线浴室”

我想用(SURF(加速稳健特征)是一个强大的图像描述符,首先提出的赫伯特湾等。的2006年),或东西是基于二维Haar小波的总和反应,使查找图像的所有直线的有效利用整体图像。我想获得相对于图像的像素COORDS开始和线条的终点。

因此,在这个图像上找到顶砖和2条的那些黑线之间的所有行。

是否有任何这样的代码示例(用线搜索能力),以从开始?

我爱C和C ++,但任何其他可读代码将可能为我工作=)

有帮助吗?

解决方案

以下是应用的一个完整的例子的 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

“替代文字”

“替代文字”

“替代文字”

您可以尝试其他地区相同的过程,而调整参数,以获得良好的效果..

其他提示

您是否尝试过一个更简单的方法,如Hough变换寻找线?的函数来执行此和例子都包括在OpenCV中称为 cvHoughLines2

scroll top