我正在尝试实现一种图像混合算法,它接收两幅图像 im1、im2和二值遮罩,并根据该遮罩混合两个图像。 我使用以下公式:
https://i.stack.imgur.com/uxz34.png
构建混合图像的拉普拉斯金字塔,然后重建它 以接收最终图像
我的代码:
mask = mask.astype(np.float64)
pyr_im1, filter_vec = build_laplacian_pyramid(im1, max_levels,
filter_size_im)
pyr_im2 = build_laplacian_pyramid(im2, max_levels,
filter_size_im)[0]
pyr_mask = build_gaussian_pyramid(mask, max_levels,
filter_size_mask)[0]
# build the blended laplacian pyramid
l_out = [np.multiply(pyr_mask[k], pyr_im1[k])
+ np.multiply(1 - pyr_mask[k], pyr_im2[k])
for k in range(len(pyr_im1))]
im_blend = laplacian_to_image(l_out, filter_vec, [1] * len(l_out))
im_blend = np.clip(im_blend, 0, 1) # clip values to the range of [0,1]
return im_blend
其中,掩码是值为0或1的二进制掩码,im1和im2为np.64 标准化为(0,1)范围的图像。函数建立了拉普拉斯金字塔, 建立高斯金字塔和拉普拉斯图像完美地工作-我已经测试过了 并确保它们正常工作。当我使用此代码尝试 混合两幅图像,我得到如下结果:
https://i.stack.imgur.com/0NlKv.png
我的代码中是否存在任何可能出现的问题
提前谢谢
嗨,我不确定到底出了什么问题,但我认为你需要在涂抹混合液时反转面膜
以下是我的代码,似乎很有效:
有功能
我还确保使用浮动直到结束,然后将其边界限制在0到255之间
希望这有帮助
相关问题 更多 >
编程相关推荐