【发布时间】:2017-06-27 06:16:37
【问题描述】:
我正在尝试在 Matlab 中模拟 alpha 合成的功能,或者更具体地说是 ImageMagick 中的 CopyOpacity 和 Over 合成类型。第一个目标是屏蔽具有重锯齿边缘的区域,例如集合(image set with aliasing edges) 中图像中的黑色区域。这应该使用兼容的灰度蒙版来完成,黑色区域应该被消除,白色应该被保留,请参阅gray scale mask。重要的是黑白之间的连续过渡导致透明和不透明之间的连续过渡,请参阅screenshot with transparent regions)。
有两种方法可以用灰度掩码 CM_mask_blur_alpha 组合前景 FG 和背景 BF,但结果不如预期(参见 image set with post-processing,ImageMagick 作为纯 Matlab 程序的参考)。
1) 在第一个代码中,灰度掩码意外地被视为二进制掩码,导致以前黑色区域的边缘出现不可接受的混叠效果 (image set for first approach):
FG = uint8(CM_mask_blur_alpha .* FG + (1 - CM_mask_blur_alpha) .* BG);
2) 第二种方法会导致前景和背景之间出现可见的连续过渡,但剩余的 FG 会产生混叠效果 (image set for second approach):
FG = uint8(bsxfun(@times, CM_mask_blur_alpha, FG) + bsxfun(@times, (1 - CM_mask_blur_alpha), BG));
似乎一步法不起作用,所以我正在寻找一种像 ImageMagick 中那样的两步法,它会屏蔽黑色区域,从而产生具有透明度的中间图像,第二步是合成这个中间图像在背景上。这部分是一个问题设置,如 MATLAB: Applying transparent mask over an RGB image and blending with another 但没有灰度蒙版,我无法调整解决方案部分,例如生成具有从灰度蒙版派生的值的 alpha 通道。
【问题讨论】:
标签: matlab image-processing compositing