Jesteś świadomy, że wizualnie kontroli temperatury mętnienia ty czy potrafisz już rozróżnić wiele prostokątów? Innymi słowy, najprawdopodobniej znajdziesz wiele prostokątów, jeśli nie wykonujesz jakiejś procedury wstępnej selekcji ...
W każdym razie, oprócz metody już podanej przez @ mathematician1975, możesz również po prostu sprawdzić, czy strony są (mniej więcej) równoległe. Metoda
nazwijmy @ mathematician1975 za method 1
i równoległe sprawdzić method 2
. Następnie:
%# 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.
Należy pamiętać, że są to zarówno najgorszy przypadek; przy odrobinie księgowości można drastycznie obniżyć koszty obu.
Należy również pamiętać, że method 2
musi wcześniej wiedzieć, że wierzchołki są już we właściwej kolejności. Jeśli tak nie jest, zwiększy to koszt o współczynnik 4, czyli o więcej niż method 1.
.
Czy mogę zapytać, jak obliczasz odległości?
Tak, jak zauważyłeś, obliczenie wszystkich odległości zajmuje dużo czasu, nawet dla _small_ obrazu wejściowego. Sprawdziłem już to rozwiązanie. Segmentacja kolorów nie byłaby przydatna w przypadku obrazów w skali szarości (przykłady są nieco mylące, przepraszam), ale użyłem ich do renderowania RGB. Jeśli chodzi o transformację Hougha, zrobiłem kilka testów i działa całkiem dobrze, ale wykryte linie ** nie ** krzyżują się ze sobą, jak pokazano tutaj: [hough] (http://i.imgur.com/NP8HT .jpg). – sowizz
@sowizz spójrz na aktualizację. – ArtemStorozhuk
W większości przypadków działa to całkiem dobrze, więc zamierzam oznaczyć je jako odpowiedź. Jednak w niektórych sytuacjach zawiedzie, ponieważ nie ma zamkniętego obszaru. Przydają się wówczas operacje morfologiczne, ale prawie w każdym przypadku wymagają innych parametrów, co czyni je mniej przydatnymi. Wszelkie pomysły, jak rozwiązać ten problem? Oto przykład takiej sytuacji: [kliknij] (http://i.imgur.com/mY27w.jpg) – sowizz