Basé sur la question en Subset a region from boundary coordinates - Matlab J'ai essayé d'utiliser imrect à la place (bien qu'il limite aux rectangles sans angle).Sous-ensemble d'une région à partir des coordonnées de limites en utilisant imrect - Matlab
Néanmoins, j'ai un problème avec la sortie car je n'obtiens pas de coordonnées x, y. Pourquoi?
Script:
clc;
clear;
I = imread('https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Astroid_created_with_Elipses_with_a_plus_b_const.svg/330px-Astroid_created_with_Elipses_with_a_plus_b_const.svg.png');
I = rgb2gray(I);
I = imcomplement(I);
level = graythresh(I);
BW = im2bw(I,level);
BW_filled = imfill(BW,'holes');
boundaries = bwboundaries(BW_filled);
figure,imshow(I) ;
hold on;
b = boundaries{1};
plot(b(:,2),b(:,1),'b','LineWidth',2);
xq = b(:,2);
yq = b(:,1);
h = imrect;
pos = getPosition(h);
X1 = round(pos(1));
Y1 = round(pos(2));
X2 = round(X1 + pos(3));
Y2 = round(Y1 + pos(4));
xv=[X1 X2];
yv=[Y1 Y2];
scatter(X1,Y1 ,'r')
scatter(X2,Y2 ,'r')
[in,on] = inpolygon(xq,yq,xv, yv) %xq and yq are inside or on the edge of the polygon area defined by xv and yv
Voulez-vous dire que pos est vide? Quoi qu'il en soit, vous pourriez mettre un 'pause()' devant 'pos = getPosition (h); ' laisser l'utilisateur ajuster le rectangle. Sinon, vous lirez sa position dès qu'elle sera placée. – Zep
Le [in, on] affiche seulement 0 et 1 mais pas les coordonnées. – jane
La fonction 'inpolygon' ne retounne pas les coordonnées. Il retourne en indiquant si les points de requête spécifiés par xq et yq sont à l'intérieur ou sur le bord de la zone de polygone définie par xv et yv._ Il retourne également sur indiquant si les points de requête sont sur le bord de la zone de polygone – Zep