我有外部地标点的位置,如下所示:
现在我想"关闭"这个轮廓来自外面的下巴和眉毛,并将一切都掩盖为零,所以我想获得这样的东西:
所以我想我有两件事要做:
我不确定如何做其中任何一个。是否有简单的,特定于MATLAB的方法?还是一个例子?
感谢您的帮助!
我从page找到了roipoly
,但它要求用户给出我猜的多边形。我可以自动计算吗?
是的我可以,只需BW = roipoly(img, c,r); img2 = img.*uint8(BW);
然而,问题仍然存在于哪些地标用于轮廓。我可以基于规则分配它们,但如果我想选择"外部"地标自动?
所以我猜现在这个问题转变为:
在2D平面上给定N个点,如何选择创建覆盖所有其他多边形的多边形的子集(即外表面)?
答案 0 :(得分:2)
您可以按如下方式使用boundary
和poly2mask
。我手动标记了几个点,因为你没有提供面部坐标。
clc; clear all;
img = imread('FAm1z.jpg');
figure; imshow(img);
[x,y] = ginput(50);
k = boundary(x,y,0);
hold on;
plot(x,y,'ro');
plot(x(k),y(k));
mask = poly2mask(x(k), y(k), size(img,1), size(img,2));
mask(:,:,2) = mask;
mask(:,:,3) = mask(:,:,1);
roi = img;
roi(mask == 0) = 0;
figure; imshow(roi);
输出图片: