Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:灰度掩模Alpha合成_Matlab_Image Processing_Compositing - Fatal编程技术网

Matlab:灰度掩模Alpha合成

Matlab:灰度掩模Alpha合成,matlab,image-processing,compositing,Matlab,Image Processing,Compositing,我试图在Matlab中模拟alpha合成的功能,或者从ImageMagick中更具体地模拟CopyOpacity和Over的合成类型。第一个目标是遮罩具有严重锯齿边缘的区域,如集合中图像中的黑色区域。这应该用一个兼容的灰度掩模来完成,黑色区域应该被消除,白色区域应该被保留。重要的是,黑色和白色之间的连续过渡导致透明和不透明之间的连续过渡,请参见 有两种方法可以合成前景FG和背景BF,一种是灰度遮罩CM_遮罩_模糊_alpha,但结果并不像预期的那样(请参阅一个以ImageMagick为参考的纯M

我试图在Matlab中模拟alpha合成的功能,或者从ImageMagick中更具体地模拟CopyOpacity和Over的合成类型。第一个目标是遮罩具有严重锯齿边缘的区域,如集合中图像中的黑色区域。这应该用一个兼容的灰度掩模来完成,黑色区域应该被消除,白色区域应该被保留。重要的是,黑色和白色之间的连续过渡导致透明和不透明之间的连续过渡,请参见

有两种方法可以合成前景FG和背景BF,一种是灰度遮罩CM_遮罩_模糊_alpha,但结果并不像预期的那样(请参阅一个以ImageMagick为参考的纯Matlab程序)

1) 在第一个代码中,灰度遮罩意外地被视为二进制遮罩,从而在以前的黑色区域()的边缘产生不可接受的锯齿效果:

2) 第二种方法导致在前景和背景之间出现可见的连续过渡,但仍然存在来自FG的锯齿效果():

似乎一步方法不起作用,所以我正在寻找像ImageMagick一样的两步方法,用黑色区域遮罩,生成透明的中间图像,第二步在背景上合成该中间图像。这在一定程度上是一个问题设置,如
但是没有灰度掩模,我无法适应解决方案部分,比如用从灰度掩模中导出的值生成alpha通道

原来问题不在于合成部分,而在于遮罩。如果使用具有较大值(se=strel('disk',9))的形态学运算(imdeflate)放大掩模,然后使用相对较大的值(如sigma=3)模糊(imgaussfilt),则混叠边将被平滑过渡遮住

whiteImage = 255 * ones(cm_out_h, cm_out_h, 'uint8');
conformal = maketform('custom', 2, 2, [], @conformalInverse_0001, []);
CM_mask = imtransform(whiteImage, conformal, ...,  'FillValues', 0);
% MORPHOLOGY: ENLARGE BLACK WITH imdilate
CM_mask = imcomplement(CM_mask);
se = strel('disk',9);
CM_mask = imdilate(CM_mask,se);
CM_mask = imcomplement(CM_mask);
% BLUR
CM_mask_blur = imgaussfilt(CM_mask, 3);      
% ALPHA
CM_mask_blur_alpha = double(CM_mask_blur)/255;
CM_mask_blur_alpha = im2double(CM_mask_blur_alpha); 
FG = uint8(bsxfun(@times, CM_mask_blur_alpha, FG) + bsxfun(@times, (1 - CM_mask_blur_alpha), BG));
whiteImage = 255 * ones(cm_out_h, cm_out_h, 'uint8');
conformal = maketform('custom', 2, 2, [], @conformalInverse_0001, []);
CM_mask = imtransform(whiteImage, conformal, ...,  'FillValues', 0);
% MORPHOLOGY: ENLARGE BLACK WITH imdilate
CM_mask = imcomplement(CM_mask);
se = strel('disk',9);
CM_mask = imdilate(CM_mask,se);
CM_mask = imcomplement(CM_mask);
% BLUR
CM_mask_blur = imgaussfilt(CM_mask, 3);      
% ALPHA
CM_mask_blur_alpha = double(CM_mask_blur)/255;
CM_mask_blur_alpha = im2double(CM_mask_blur_alpha);