2014-12-23 2 views
5

Sto provando a fare un'analisi di forma di un oggetto in un'immagine in MATLAB (in particolare). Per fare ciò, ho trovato dei pixel di confine. Per ogni pixel di confine sto calcolando il suo vicino usando la teoria di 8-vicinato. Ora sto calcolando la tangente di un punto al suo unico vicino (dipende da come seleziono in senso orario o altro). Il mio algoritmo funziona bene se ogni pixel ha esattamente due vicini. Per forme mostrate in this picture (ordine 9 x 15 pixel).Trovare il pixel migliore del vicino

Ma se ci sono più di 2 vicini di un pixel, il mio algoritmo si confonde. Ad esempio come mostrato in (ordine 9 X 15 pixel).

enter image description here

voglio prendere tangenti di ogni pixel di confine con il pixel prossimo in senso orario o in senso antiorario e se notate seconda immagine, immagine contorno valido, che è, se mi sto muovendo in senso orario poi il vicino di pixel rossi sarebbe verde e il vicino di verde in senso orario sarebbe "1" e il vicino di "1" è "2", ma non posso tornare ai pixel blu e marrone e non posso visitare e prendere la tangente di ogni confine pixel con il suo pixel vicino.

Ho imparato gli algoritmi di visita del nodo del grafico in cui mantieni la coda o lo stack ma in questo caso non voglio solo visitare ciascun pixel ma anche prendere tangente di ogni pixel con solo pixel vicini a destra in base alla direzione I mi sto muovendo.

Questo è un problema di esempio e problemi simili possono verificarsi in qualche altro modo, quindi sto cercando di generare qualche algoritmo generico per questo. Apprezzerò il tuo aiuto. Grazie.

+0

è necessario visualizzare il calcolo, come accade nel corso confini tra pixel, non pixel. Quindi non c'è nessun problema. Quindi, procedendo in senso orario, scoprirai che i fili blu-rossi portano ai fili rosso-blu e quelli blu-rossi e non ci sono problemi. – btilly

+0

Ma la 2a immagine è un'immagine valida in cui tutti i pixel sono pixel al contorno. Quindi, mentre si scorre su pixel, si tiene presente che ogni pixel che è bianco è un pixel di confine. –

risposta

1

Come già detto btilly. La soluzione è trovare i confini tra i pixel e non i pixel stessi. Ti raccomando una parte del Potrace Algorithm. È un Algoritmo per vettorializzare le immagini binarie. La parte interessante è per te la decompisizione del Sentiero. Ecco l'idea del decompisition Percorso:

Path following

Il Potrace Algorithm potete trovare qui.

Un altro Algoritmo è di Wilhelm Burge e Burger nel Libro "digital image processing an algorithmic introduction using enter link description here". Nel link puoi vedere alcune parti del libro. La parte interistente è la funzione "TraceContour" a pagina 538. Questo Algoritmo funziona come hai pensato e cammina attorno ai pixel "interni". Ho trovato un'esplorazione di Alorith here, alla traccia del bordo interno. Puoi fare l'Algorithm con una connettività neighboor quattro o otto.

The connectivity