Domanda

Così ho un'immagine di questo tipo:

CG bagno generato

voglio ottenere qualcosa di simile (non ho disegnato tutte le linee che voglio, ma spero si può ottenere la mia idea):

Black & White CG bagno generato con alcune linee rosse tra le piastrelle

Voglio usare SURF ((accelerato Caratteristiche robuste) è un robusto descrittore di immagini, prima presentata da Herbert Bay et al. nel 2006) o qualcosa che si basa su somme di 2D Wavelet Haar risposte e fa un uso efficiente di immagini integrali per reperire tutte le linee diritte sull'immagine. Voglio arrivare relative al quadro coordinate di pixel di inizio e punti finali delle linee.

Quindi, su questa immagine per trovare tutte le righe tra le piastrelle e quei 2 linee nere sulla parte superiore.

C'è un tale codice di esempio (con ricerca linee capacità) per iniziare?

Amo C e C ++, ma qualsiasi altro codice leggibile probabilmente funzionerà per me =)

È stato utile?

Soluzione

Il seguente è un esempio completo di applicazione Hough Transform per rilevare linee. Sto usando MATLAB per il lavoro ..

Il trucco è di dividere l'immagine in regioni ed elaborare ogni diverso; questo è perché avete diverse "texture" nella scena (piastrelle sulla regione superiore della parete sono molto diverse da quelle più scure sul fondo, e l'elaborazione dell'immagine tutto in una volta non sarà ottimale).

Come un esempio di lavoro, considerare questo:

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

Si potrebbe provare la stessa procedura per le altre regioni, mentre i parametri di sintonizzazione per ottenere buoni risultati ..

Altri suggerimenti

Hai provato un approccio più semplice, come la trasformata di Hough per la ricerca di linee? Una funzione per eseguire questo esempio e sono inclusi in OpenCV chiamato cvHoughLines2 .

trasformate wavelet bidimensionale sono implementati in R utilizzando il pacchetto waveslim . Specificamente, la funzione dwt2D () utilizza una C "back-end" per la velocità. È quindi possibile applicare sogliatura per trovare le linee.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top