Au lieu d'une approche de traitement d'image, nous allons essayer une approche plus algébrique.
Vous avez des pixels blancs - points 2D sur un plan, et que vous souhaitez trouver trois demi-plans (lignes droites) que ces points plus séparés du reste du plan.
Alors, commençons
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
Pour la stabilité, nous soustrayons la moyenne de tous les points - centrage des pixels blancs autour de l'origine:
mm = mean([x y],1);
mA = bsxfun(@minus, [x y], mm);
Maintenant, une ligne peut être décrite par deux paramètres , tous les points (x, y)
qui satisfont L(1)*x + L(2)*y = 1
. Afin de trouver une ligne dont tous les points sont strictement d'un côté, cette inégalité doit correspondre à tous les points de l'ensemble: . Nous pouvons forcer ces inégalités et rechercher la moitié plus serré plan L
qui remplissent cette contrainte en utilisant 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));
Notez comment en changeant la cible d'optimisation quadratique f
, nous sommes en mesure d'obtenir différents plans de demi séparant les pixels blancs .
Une fois que nous avons les trois lignes, nous pouvons obtenir les points d'intersection (les déplacer en arrière de l'origine par mm
):
x12=inv([L1';L2'])*ones(2,1)+mm';
x23=inv([L3';L2'])*ones(2,1)+mm';
x13=inv([L3';L1'])*ones(2,1)+mm';
Vous pouvez utiliser voir les résultats
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');
combien/quel coins voulez-vous détecter? pouvez-vous ajouter une image avec les coins décrits? –
Il devrait y avoir 3 coins et j'ai ajouté une pièce jointe à la question originale. – user3315340
Quelqu'un sait-il un moyen pour moi de détecter les trois coins? J'ai regardé dans houghline mais je ne suis pas sûr de savoir comment l'utiliser correctement. – user3315340