画像ピラミッド画像融合ケース+のOpenCVの画像処理

1.原理

  • 私が書いた記事画像ピラミッドは何を
  • ガウス分布から計算ラプラスピラミッド式のピラミッド。 L = G - P R ザ・ P G + 1 L_iを= G_i-pyrUp(G_i + 1)

2.画像​​ピラミッドコードと結果

  • cv2.pyrDown()
  • cv2.pyrUp()

ピラミッドを構築する大型の高解像度画像から関数cv2.pyrDown()(サイズが小さくなり、解像度が低下します)。小型のピラミッドを構築するためのダウン低解像度画像から関数cv2.pyrUp()(サイズが大きくなるが、分解能が増加しません)。

def pyr_up_down(self):
    lower_reso=cv2.pyrDown(self.img)#降采样一次,长宽缩小为1/2,面积变为1/4
    higher_reso2=cv2.pyrUp(lower_reso)#放大到二倍
    cv2.imshow('raw', self.img)
    cv2.imshow('low',lower_reso)
    cv2.imshow('high', higher_reso2)
    cv2.waitKey(0)
    print(self.img.shape)#(640, 640, 3)
    print(lower_reso.shape)#(320, 320, 3)
    print(higher_reso2.shape)#(640, 640, 3)

ここに画像を挿入説明
減少はズームインし、その後、見ることができた後、画像がぼやけてきました。()、画像の解像度が使用cv2.pyrDown一旦減少するため、データが失われます。

画像融合コードおよび結果

def img_blend(self):
    #【1】读入两幅图像
    A=cv2.imread('../images/apple.jpg')
    B=cv2.imread('../images/orange.jpg')
    # 【2】构建两幅图像的高斯金字塔(6层)
    G=A.copy()
    gpA=[G]
    for i in range(6):
        G=cv2.pyrDown(G)
        gpA.append(G)

    G=B.copy()
    gpB=[G]
    for i in range(6):
        G=cv2.pyrDown(G)
        gpB.append(G)

    # 【3】根据高斯金字塔计算拉普拉斯金字塔-计算公式
    # Li = Gi -PyrUp(Gi+1)
    lpA=[gpA[5]]#L[5]=G[5]
    for i in range(5,0,-1):#倒着计算,至下而上
        L=cv2.subtract(gpA[i-1],cv2.pyrUp(gpA[i]))#L[4]=G[4]-pyrUp(G[5])
        lpA.append(L)

    lpB=[gpB[5]]
    for i in range(5,0,-1):
        L=cv2.subtract(gpB[i-1],cv2.pyrUp(gpB[i]))
        lpB.append(L)

    # 【4】在拉普拉斯的每一层进行图像融合(苹果的左边,橘子的右边)
    LS=[]
    for la,lb in zip(lpA,lpB):
        rows,cols,dpt=la.shape
        ls=np.hstack((la[:,0:cols//2],lb[:,cols//2:]))
        LS.append(ls)

    # 【5】根据融合后的图像金字塔重建原始图像
    res=[]
    ls_=LS[0]#LS是融合后的拉普拉斯图像,0-5是从小到大
    res.append(ls_)
    for i in range(1,6):
        ls_=cv2.pyrUp(ls_)#向上构建金字塔
        ls_=cv2.add(ls_,LS[i])
        res.append(ls_)

    real=np.hstack((A[:,:cols//2],B[:,cols//2:]))
    titles = ['apple', 'orange','real','blend']
    images = [A, B,real,ls_]
    for i in range(4):
        img=cv2.cvtColor(images[i],cv2.COLOR_BGR2RGB)
        plt.subplot(1,4,i+1),plt.imshow(img)
        plt.title(titles[i])
        plt.xticks([]),plt.yticks([])
    plt.show()

中間結果:
(1)ガウシアンピラミッドオレンジgpB(実際の画像領域は、次の1/4である)
ここに画像を挿入説明
ラプラシアンピラミッド(2)オレンジlpB(実際の画像領域、次の4倍です)
L = G - P R ザ・ P G + 1 L_iを= G_i-pyrUp(G_i + 1) すなわち、L、である[4] = G [この式は、ピラミッドの各階層の意味を推定することができるラプラシアンガウシアン各層のピラミッドと失われる元の情報のサイズを縮小する拡大です。
ここに画像を挿入説明
ラプラシアンピラミッド(3)画像融合LS(画像の実際の面積は、次の4倍である)、
ここに画像を挿入説明
画像(4)融合ls_一旦拡大した後、対応するラップ:変更プロセスラスは、第二の画像を取得するために、画像層(添加バック失われた情報)を加えます。次いで、第2の画像増幅、および対応するラプラス層を追加します。などなど。
ここに画像を挿入説明
ここで疑問、それにラプラシアンピラミッドのアドオンを有効にしようとするが発生しますか?何が起こるかなし?直接からLS[0]:ビルド以下の結果をアップピラミッド
ここに画像を挿入説明
最終結果ノーマル:
ここに画像を挿入説明

公開された132元の記事 ウォン称賛40 ビュー80000 +

おすすめ

転載: blog.csdn.net/qq_36622009/article/details/104564351