使用matlab在特定位置插入图像

时间:2014-04-14 13:02:22

标签: matlab eye-detection

我想在检测到眼睛的位置插入太阳镜(png图像)(仅考虑平面内旋转)。我们使用内置的haar级联检测器来检测matlab中的眼睛。目前通过边界框突出检测到的眼睛返回了图像中眼睛的位置。让我知道它是如何完成的(我是matlab的初学者)。

1 个答案:

答案 0 :(得分:0)

(假设两个图像都是灰度图像,但扩展到rgb并不困难。未经检查,我不承诺我在某些时候没有翻转x / y坐标。)

如果您的眼睛位置大致在同一水平线上,例如 直面:

face = your face image
ohyeah = your sunglasses image
fspan = horizontal distance between eyes, in pixels
(You should be able to get this easily from the bounding box info)

gspan = ditto for the sunglasses image
(You can do this manually - only need to measure it once)

cpos = central position, [x y] of the eyes
(Again, calc from bounding box)

检查您是否需要调整太阳镜图像的大小 - 可能只需要大于或小于您需要的尺寸:

sr = fspan/gspan;
if abs(sr-1)>thresh;
    ohyeah = imresize(ohyeah, sr);
end

现在,我们找到左上角和右下角:

pos1 = pos - ceil(size(ohyeah)/2); 
pos2 = pos1 + size(ohyeah) - 1;

注意:您可能需要/需要检查这些值是否超出原始图像的外边缘。

如果上述值是face的可接受索引,您只需复制太阳镜图像:

face2 = face;
face2(pos1(1):pos2(1),pos1(2):pos2(2))=ohyeah;
imshow(face2);

这显然只是将一个矩形贴在正确的位置。你也可以更漂亮并使用面具,见下文:

对于旋转面:

1)旋转并调整眼镜图像的大小以匹配(例如,如果您知道眼镜图像上您希望眼睛中心的点是简单的几何形状)。

2)制作一个BW面具,即眼镜所在的位置为1,否则为0(如果您的图像位于黑色背景上则相对容易)。

3)找到需要戴上眼镜的位置

4)剪掉脸部图像的适当部分:

face2 = face(pos1(1):pos2(1),pos1(2):pos2(2));

5)用太阳镜图片替换它的相应部分:

face2(BW) = ohyeah(BW);

6)将其粘贴回原始图像

face(pos1(1):pos2(1),pos1(2):pos2(2)) = face2;