Pregunta

Así que tengo una imagen como esta:

CG baño generado

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

baño generada Blanco y Negro CG con algunas líneas rojas entre las baldosas

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 2D Haar wavelet respuestas y haga un uso eficiente de imágenes integrales para encontrar todas las líneas rectas en la imagen. Quiero llegar en relación con la imagen de píxeles coords puntos inicial y final de las líneas.

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 este tipo de código (con líneas Capacidad de búsqueda) para empezar?

I love C y C ++, pero cualquier otro código legible probablemente va a funcionar para mí =)

¿Fue útil?

Solución

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

El truco consiste en dividir la imagen en regiones y procesar cada uno de manera diferente; esto es porque tiene diferentes "texturas" de la escena (azulejos en la región superior de la pared son muy diferentes de las más oscuras en la parte inferior, y el procesamiento de la imagen a la vez no será óptima).

Como un ejemplo de trabajo, considere la siguiente:

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

text alt

text alt

text alt

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

Otros consejos

¿Usted ha intentado un enfoque más simple, como la transformada de Hough para encontrar líneas? Una función para llevar a cabo esto y ejemplo están incluidos en OpenCV llama cvHoughLines2 .

transformadas de tren de ondas bidimensional se implementan en R utilizando el paquete waveslim . Específicamente, la función dwt2D () utiliza un C "backend" para la velocidad. A continuación, puede aplicar de umbrales para encontrar las líneas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top