Anstatt Bildverarbeitung Ansatz, versuchen wir einen eher algebraischen Ansatz.
Sie haben weiße Pixel - 2D-Punkte in einer Ebene, und Sie möchten drei Halbebenen (gerade Linien) finden, die diese Punkte am besten vom Rest der Ebene trennen.
So lassen Sie uns
img=imread('http://i.stack.imgur.com/DL2Cq.png'); %// read the image
bw = img(:,:,1) > 128; %// convert to binary mask
[y x] = find(bw); %// get the x-y coordinates of white pixels
n=numel(x); %// how many do we have
Für Stabilität beginnen wir den Mittelwert aller Punkte subtrahieren - um den Ursprung, die weißen Pixel Zentrierung:
mm = mean([x y],1);
mA = bsxfun(@minus, [x y], mm);
Nun kann eine Linie durch zwei Parameter beschrieben werden , alle Punkte (x, y)
, die L(1)*x + L(2)*y = 1
erfüllen. Um eine Linie zu finden, in der alle Punkte genau auf einer Seite liegen, muss diese Ungleichung für alle Punkte (x,y)
der Menge gelten: L(1)*x + L(2)*y <= 1
. Wir können diese Ungleichheiten zwingen und für die meisten enge Halbebene suchen L
, dass diese Einschränkung erfüllen mit quadprog
:
L1 = quadprog(eye(2), -ones(2,1), mA, ones(n,1));
L2 = quadprog(eye(2), ones(2,1), mA, ones(n,1));
L3 = quadprog(eye(2), [1; -1], mA, ones(n,1));
Beachten Sie, wie durch das quadratische Optimierungsziel zu ändern f
, wir sind in der Lage verschiedene Halbebene zu erhalten, die weiße Pixel Trennung .
Sobald wir die drei Linien haben, können wir die Schnittpunkte erhalten (sie zurück vom Ursprung durch mm
Verschiebung):
x12=inv([L1';L2'])*ones(2,1)+mm';
x23=inv([L3';L2'])*ones(2,1)+mm';
x13=inv([L3';L1'])*ones(2,1)+mm';
können Sie sehen, verwenden Sie die Ergebnisse
imshow(bw,'border','tight');
hold all;
%// plot the lines
ezplot(gca, @(x,y) L1(1)*(x-mm(1))+L1(2)*(y-mm(2))-1, [1 340 1 352]);
ezplot(gca, @(x,y) L2(1)*(x-mm(1))+L2(2)*(y-mm(2))-1, [1 340 1 352]);
ezplot(gca, @(x,y) L3(1)*(x-mm(1))+L3(2)*(y-mm(2))-1, [1 340 1 352]);
%// plot the intersection points
scatter([x12(1) x23(1) x13(1)],[x12(2) x23(2) x13(2)],50,'+r');

wie viele/welche Ecken möchten Sie erkennen? Kannst du ein Bild mit den skizzierten Ecken hinzufügen? –
Es sollte 3 Ecken geben und ich habe einen Anhang zur ursprünglichen Frage hinzugefügt. – user3315340
Kennt jemand eine Möglichkeit für mich, die drei Ecken zu erkennen? Ich habe mir einen Blick in die Zukunft geworfen, aber ich bin mir nicht sicher, wie ich es richtig anwenden soll. – user3315340