Siete consapevoli che controllando visivamente nuvola di punti che si puoi già distinguere una moltitudine di rettangoli? In altre parole, è probabile che tu trovi molti rettangoli se non fai una sorta di routine di preselezione ...
Ad ogni modo, a parte il metodo già fornito da @mathatician1975, puoi anche controllare se i lati sono (più o meno) paralleli.
Chiamiamo il metodo di @maticatician1975 method 1
e il controllo parallelo method 2
. Poi:
%# method 1:
n1 = |u1-u2| %# 3 sub., 3 mult, 2 add. per distance
n2 = |u3-u2| %# total of 6 distances to compute.
n3 = |u4-u3| %# then max 5+4+3+2+1 = 15 comp. to find unique distances
n4 = |u1-u4|
n5 = |u4-u2| %# Total:
n6 = |u3-u1| %# 12 sub., 18 mult., 12 add, 15 comp
%# method 2:
w1 = u1-u2 %# 3 subtractions per vector
w2 = u3-u2 %# total of 4 vectors to compute
w3 = u3-u2
w4 = u1-u4
%# 12 sub.
abs(w1-w3) == [0 0 0] %# 3 sub., 3 comp., 1 sign.
abs(w2-w4) == [0 0 0] %# 3 sub., 3 comp., 1 sign.
%# Total: 18 sub., 6 comp. 2 sign.
Nota che questi sono entrambi caso peggiore; con un po 'di contabilità puoi ridurre drasticamente il costo di entrambi.
Si noti inoltre che method 2
deve sapere in anticipo che i vertici sono già nell'ordine corretto. Se questo non è il caso, aumenterà il costo di un fattore 4, che è più che method 1.
.
Posso chiederti come stai calcolando le distanze?
fonte
2012-08-28 12:11:52
Sì, come hai sottolineato calcolando tutte le distanze consuma molto tempo anche per l'immagine di input _small_. Ho già controllato quella soluzione. La segmentazione del colore non sarebbe utile con le immagini in scala di grigi (gli esempi sono un po 'confusi, scusate) ma l'ho usato per quelli RGB. Come per la trasformazione di Hough ho fatto alcuni test e funziona piuttosto bene, ma le linee rilevate ** non ** si intersecano tra loro come mostrato qui: [hough] (http://i.imgur.com/NP8HT .jpg). – sowizz
@sowizz guarda all'aggiornamento. – ArtemStorozhuk
Questo lavoro funziona abbastanza bene nella maggior parte dei casi, quindi ho intenzione di contrassegnarlo come risposta. Tuttavia in alcune situazioni fallisce perché non c'è un'area chiusa. Le operazioni morfologiche sono utili, ma per quasi tutti i casi hanno bisogno di parametri diversi, il che non li rende così utili. Qualche idea su come risolvere questo problema? Ecco un esempio di tale situazione: [clicca] (http://i.imgur.com/mY27w.jpg) – sowizz