如何融合图像与背景图像非矩形面具?

13个视图(30天)
好吧,我难住了。
我有一个背景图像,我想把一个圆形掩模图像上,混合在一起50 - 50圈内的一切。我想坚持和不使用数字图像,这样我可以查看结果显示亮度图像(图像)。
如果pic1裁剪成圆的完整图像,和pC是一个白色背景上的黑色圆与维度bCx bCy,我用这个添加图像中我想要的。
pzzc = imadd (pic1 (bCx、bCy:), pC);
我现在有一个圆的原始图像和一个白色背景。目前为止一切都很顺利。
我现在想结合图像与背景图像,诸如此类。
pzzz = imfuse (pzzz pzzc,“混合”);
问题是,这行不通,因为我不能摆脱周围的广场边界框圆图像,因为它的意思是2图片,白色和背景。
immultiply不起作用。用这个替代方法:
pzz = immultiply (uint16 (pzzz (bCx、bCy:)), uint16 (pzzc));%的图像和背景
pzzz (bCx bCy:) = uint8 (pzz);
pzz圆正确但未混合的,蒙面的一部分pzzz白就说出来了。
如果我不得不生活在未混合的图像,但是我不明白为什么戴面具的完整图像的一部分是白色的。
一个完整的代码示例如下:
清晰的所有
pic1 = imread (“visionteam.tif”);
[x, y, z] =大小(pic1);
pzzz = 20-uint8 (0 (x, y, z));
%添加一个深灰色背景图像是否圆失去背景白色区域
电脑= imread (“Circle1000x1000.tif”);% 1000 X 1000黑色圆白色背景
bbox = (86 52 70 70);% X Y H W
电脑= imresize (pC, [bbox (1,3), bbox (1、4)));%调整圆BB维度
bCx = bbox (1,1): bbox (1,1) + bbox (1、3) 1;X和Y %发现BB的领域
bCy = bbox (1、2): bbox (1、2) + bbox (1、3) 1;
掩码= imadd (pic1 (bCx、bCy:), pC);%添加Visionteam图像内部循环
掩码= uint8(面具);
pzzz (bCx bCy:) = immultiply (uint16 (pzzz (bCx、bCy:)), uint16(面具))/ 255;
pzzz = uint8 (pzzz);
显示亮度图像(pzzz)
3评论

登录置评。

接受的答案

图像分析
图像分析 2020年4月4日
请附上visionteam。tif’和‘Circle1000x1000。tif”或两个相似的图像。
我做的是做一个面具,然后转换成双,然后添加,转换回uint8。未测试的代码:
%现在和不透明度的因素
系数= 0.5;
sumImage = uint8(因子*双(分辨率)+(1 -因子)* teamImage);
%的面具和图像使用bsxfun()函数将每个通道单独的面具。
maskedTeamImage = bsxfun (@times sumImage铸造(circleMask,“喜欢”sumImage));
%烧黑圈入背景我们可以添加它们。
maskedBackgroundImage = bsxfun (@times、分辨率、投(~ circleMask,“喜欢”teamImage));
%现在简单总结填写50/50混圆的圆片。
outputImage = maskedBackgroundImage + maskedTeamImage;%初始化
8的评论
图像分析
图像分析 2020年4月7日
好的,抱歉延迟。这是一个完整的演示。需要一个面具和背景图像,另一个面孔形象和创建一个新的图像背景图像和人脸图像混合50/50在面具的面具以外的地区和最大亮度背景区域。
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式短g;
格式紧凑的;
字形大小= 18;
流(运行% s的开始。m…\ n”,mfilename);
hFig =图;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%读面对图片:
rgbImage = imread (“visionteam.jpg”);
%显示图像。
次要情节(2、4、1);
imshow (rgbImage []);
标题(的原始灰度图像,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
hFig。WindowState =“最大化”;%可能不会在MATLAB的早期版本中工作。
drawnow;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%在面具图片:
掩码= imread (“Circle1000x1000.jpg”);
% Binarize
掩码=面具(::1)< 128;
%调整掩模图像大小相同。
掩码= imresize(面具,[大小(rgbImage, 1),大小(rgbImage, 2)));
%显示图像。
次要情节(2、4、2);
imshow(面具,[]);
标题(“面具”形象,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
drawnow;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%在背景图像:
backgroundImage = imread (“pears.png”);
%调整掩模图像大小相同。
backgroundImage = imresize(分辨率,大小(rgbImage, 1),大小(rgbImage, 2)));
%显示图像。
次要情节(2、4、3);
imshow(分辨率、[]);
标题(的背景图片,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
drawnow;
%戴面具的脸图像。
%掩模图像使用bsxfun()函数将每个通道单独的面具。适用于灰度以及RGB彩色图像。
maskedRgbImage = bsxfun (@times rgbImage铸造(面具,“喜欢”rgbImage));
%让一半亮度
maskedRgbImage = maskedRgbImage / 2;
%显示图像。
次要情节(2、4、4);
imshow (maskedRgbImage []);
标题(“戴面具的脸形象”,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
drawnow;
%得到蒙面背景图像亮度
%掩模图像使用bsxfun()函数将每个通道单独的面具。适用于灰度以及RGB彩色图像。
maskedBackgroundImage1 = bsxfun (@times、分辨率、投(~面具,“喜欢”rgbImage));
%显示图像。
次要情节(2、4、5);
imshow (maskedBackgroundImage1 []);
标题(“蒙面背景图像”,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
drawnow;
%得到蒙面背景图像亮度
%掩模图像使用bsxfun()函数将每个通道单独的面具。适用于灰度以及RGB彩色图像。
maskedBackgroundImage2 = bsxfun (@times、分辨率、投(面具,“喜欢”rgbImage));
%让一半亮度
maskedBackgroundImage2 = maskedBackgroundImage2 / 2;
%显示图像。
次要情节(2、4、6);
imshow (maskedBackgroundImage2 []);
标题(“蒙面背景图像模糊”,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
drawnow;
%戴面具的脸图像。
%掩模图像使用bsxfun()函数将每个通道单独的面具。适用于灰度以及RGB彩色图像。
finalImage = maskedBackgroundImage1 + maskedBackgroundImage2 + maskedRgbImage;
%显示图像。
次要情节(2、4、7);
imshow (finalImage []);
标题(“最终的图像”,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
drawnow;
流(完成运行% s。m…\ n”,mfilename);
根据需要调整。

登录置评。

答案(1)

为副总经理
为副总经理 2023年5月5日在事故
很大一部分的困惑就是试图使用imadd()和immultiply()时图像混合工具
  1. 他们没有实际的图像混合工具
  2. 图片没有按,这样它们可以混合
  3. 图像融合不会影响合成以这种方式无论如何(至少如果我理解意图)
我们可以这么解决1和2:
pic1 = imread (“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/281870/visionteam.jpg”);
[x, y, z] =大小(pic1);
%添加一个深灰色背景图像是否圆失去背景白色区域
pzzz = 0 (x, y, z) + 0.5;
电脑= imread (“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/281869/Circle1000x1000.jpg”);% 1000 X 1000黑色圆白色背景
bbox = (86 52 70 70);% X Y H W
电脑= imresize (pC, [bbox (1,3), bbox (1、4)));%调整圆BB维度
bCx = bbox (1,1): bbox (1,1) + bbox (1、3) 1;X和Y %发现BB的领域
bCy = bbox (1、2): bbox (1、2) + bbox (1、3) 1;
掩码= imadd (pic1 (bCx、bCy:), pC);%添加Visionteam图像内部循环
掩码= uint8(面具);
% immultiply()不是一个混合工具
%如果您想要使用immultiply作为混合工具
%输入图像必须单位比例浮点
pzzz (bCx bCy:) = immultiply (pzzz (bCx bCy,:), im2double(面具));
pzzz = im2uint8 (pzzz);
imshow (pzzz“边界”,“紧”)
注意评论使用immultiply ()。尽管有其局限性,这并影响繁殖的混合,而不是alpha合成。而不是圆形区域的前景和背景的线性组合,这是前台区域乘以0.5。
假设我们的目标是相反的圆形区域在一些不透明的领域,这就是我。像往常一样,我将使用 MIMT 工具,因为它们的存在,这样我就不用每次都重新发明轮子。它们简洁灵活,处理mixed-class和mixed-depth操作没有麻烦。
%的参数
不透明度= 0.5;
背景= (0.43 0.38 0.25);%任何颜色元组(1、2、3或4个元素)
%读取文件
FG = imread (“visionteam.jpg”);
%直接生成一个面具柔边
深圳= imsize (FG, 2);%得到图像几何
掩码= drawcircle(深圳,(90 75),50);
%组成输出图像
%输出图像类是继承了BG元组(双)
outpict = replacepixels (FG,背景,面具*不透明);
imshow2 (outpict)
%画光滑圆
函数中国保监会= drawcircle(深圳c r)
xx = 1:深圳(2);
yy =(1:深圳(1))。”;
中国保监会=√(xx-c (2))。^ 2 + (yy-c (1)) ^ 2);
中国保监会= min (max (- (circ-r) / 2,0), 1);
结束
或者如果我的意图的解释是不正确的,我可以复制 @Image分析师 最后一个例子为了完整性。
%读取文件
FG = imread (“pears.png”);
BG = imread (“visionteam.jpg”);
掩码= imread (“Circle1000x1000.jpg”);
%调整图像尺寸不合格的例子
深圳= imsize (BG, 2);
FG = imresize (FG, sz);
掩码= imresize(面具,sz);
%组成输出图像
%输出图像类继承自BG形象(uint8)
outpict = replacepixels (FG, BG iminv(面具)* 0.5);
imshow2 (outpict)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的