6

así que tengo una imagen como esta:¿Cómo usar Haar wavelet para detectar LÍNEAS en una imagen?

 CG generated bathroom

quiero conseguir algo como esto (no he dibujado todas las líneas quiero pero espero que pueda conseguir mi idea):

 Black & White CG generated bathroom with some red lines between tiles

quiero usar SURF ((acelerarse características robustas) es un descriptor de imagen robusta, presentado por primera vez por Herbert Bay et al. en 2006) o algo que se basa en sumas de respuestas y marcas de ondas pequeñas 2D Haar un effici uso de imágenes integrales para encontrar todas las líneas rectas en la imagen. Quiero obtener relativo a puntos de inicio y final de líneas de píxeles de imagen.

Así que en esta imagen para encontrar todas las líneas entre las baldosas y las 2 líneas negras en la parte superior.

¿Hay algún ejemplo de código (con capacidad de búsqueda de líneas) para empezar?

Me encanta C y C++, pero cualquier otro código legible probablemente trabajarán para mí =)

+0

Posible duplicado de http://stackoverflow.com/questions/2596722/is-there-any-super-fast-algorithm-for-finding-lines-on-picture – andand

Respuesta

3

El siguiente es un ejemplo completo de la aplicación de Hough Transform para detectar líneas. Estoy usando MATLAB para el trabajo ..

El truco es dividir la imagen en regiones y procesar cada una de manera diferente; esto se debe a que tiene diferentes "texturas" en su escena (las baldosas en la región superior de la pared son bastante diferentes de las más oscuras en la parte inferior, y el procesamiento de la imagen de una vez no será óptimo).

Como un ejemplo de trabajo, considere esto:

%# 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 

alt text

alt text

alt text

puede probar con el mismo procedimiento para otras regiones, mientras que el ajuste de los parámetros para obtener buenos resultados.

+0

Hough Transform es bastante lento ... Y tengo que trabajar con 2k video en vivo ... – Rella

1

¿Ha intentado un enfoque más simple, como la transformada de Hough para encontrar líneas? Una función para realizar esto y el ejemplo se incluyen en OpenCV llamado cvHoughLines2.

+0

Parece rejilla!) – Rella

0

Las transformaciones wavelet bidimensionales se implementan en R utilizando el paquete waveslim. Específicamente, la función dwt2D() utiliza un "back-end" C para la velocidad. A continuación, puede aplicar umbrales para encontrar las líneas.

Cuestiones relacionadas