加权平均融合消除图像拼接的拼缝(Python 代码)

这里提供一种采用加权平均融合消除图像拼缝的算法,供大家使用。

如下图所示,如果两张图像直接进行拼接,就会在拼接位置处产生一条拼接缝,拼接缝的产生来源于两张图像光场有差别所导致的两者虽然是连续的结构,但是在两张图中的具体数字存在一定的差异。对于具有重叠部分的两张图像,消除这种拼缝的方法主要是基于特征点匹配所涉及;但是加权平均融合方法是最为简单有效的办法,这里将此算法的python代码给出。

第一步,计算权重,这里采用的是s型曲线所计算的权重,权重如下图所示分布

第二步是进行融合,融合结果如下所示,这里已经看不清有拼缝。

 

代码如下所示:

def calWeight(d,k):
    '''

    :param d: 融合重叠部分直径
    :param k: 融合计算权重参数
    :return:
    '''

    x = np.arange(-d/2,d/2)
    y = 1/(1+np.exp(-k*x))
    return y



def imgFusion(img1,img2,overlap,left_right=True):
    '''
    图像加权融合
    :param img1:
    :param img2:
    :param overlap: 重合长度
    :param left_right: 是否是左右融合
    :return:
    '''
    # 这里先暂时考虑平行向融合
    w = calWeight(overlap,0.05)    # k=5 这里是超参

    if left_right:  # 左右融合
        col, row = img1.shape
        img_new = np.zeros((row,2*col-overlap))
        img_new[:,:col] = img1
        w_expand = np.tile(w,(col,1))  # 权重扩增
        img_new[:,col-overlap:col] = (1-w_expand)*img1[:,col-overlap:col]+w_expand*img2[:,:overlap]
        img_new[:,col:]=img2[:,overlap:]
    else:   # 上下融合
        row,col = img1.shape
        img_new = np.zeros((2*row-overlap,col))
        img_new[:row,:] = img1
        w = np.reshape(w,(overlap,1))
        w_expand = np.tile(w,(1,col))
        img_new[row-overlap:row,:] = (1-w_expand)*img1[row-overlap:row,:]+w_expand*img2[:overlap,:]
        img_new[row:,:] = img2[overlap:,:]
    return img_new
if __name__ =="__main__":
    img1 = cv2.imread(r".\test_new1.png",cv2.IMREAD_UNCHANGED)
    img2 = cv2.imread(r".\test_new2.png",cv2.IMREAD_UNCHANGED)
    img1 = (img1 - img1.min())/img1.ptp()
    img2 = (img2 - img2.min())/img2.ptp()
    img_new = imgFusion(img1,img2,overlap=128,left_right=False)
    img_new = np.uint16(img_new*65535)
    cv2.imwrite(r'.\test_new3.png',img_new)

即可得上述效果

  • 20
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 47
    评论
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值