Suppongo tu sappia come ottenere le coordinate (x,y)
dell'intersezione della linea vettoriale (verde), quindi tralascerò quella parte.
A partire dal pixel più vicino a (x,y)
, gradualmente marcia verso l'esterno in una spirale quadrata (o qualche altro modello di ricerca di tuo gradimento) da pixel a pixel. Ad ogni passaggio, controlla se sei su un pixel nero con uno e solo uno bianco Moore neighbour. Se è così, allora il punto in cui il pixel nero e il suo vicino bianco toccano (probabilmente un angolo comune) è uno dei tuoi punti (chiamalo A). Continua a marciare finché non ne trovi altri tre (B, C, D). Questi saranno i quattro punti simili più vicini all'intersezione verde, che funzioneranno bene nei quattro esempi mostrati nella domanda.
Tuttavia, questo algoritmo non funzionerà se l'intersezione verde è a metà strada tra due intersezioni nere; in questo caso mescolerà punti da entrambe le intersezioni nere. Se sei preoccupato per questo, non appena hai trovato il punto A, riavvia la tua spirale in marcia, centrata su A questa volta, e marcia fino a quando non hai trovato B, C, D. Questo sarà in effetti " aggancia "all'intersezione nera più vicina.
È possibile aggiungere più intelligenza per evitare di cercare due volte la stessa area; Riavvia o ri-focalizza il tuo modello di ricerca una volta che hai trovato B e ancora una volta dopo aver trovato C, ecc. Dipende da quanto vuoi/vuoi ottenere.
fonte
2011-09-21 08:08:10
Puoi essere più preciso: l'intersezione della linea verde dovrebbe essere ** dentro ** A, B, C, D o A, B, C, D sono come illustrati dov'è l'intersezione della linea verde? –
Fare questo con una bitmap potrebbe diventare difficile/lento. Non puoi ottenere l'input come grafica vettoriale? –
Non riesco a vedere come le linee verdi aiuteranno; nella figura 2 si intersecano alla destra di B & C. –