Python+OpenCV基于小波变换的图像融合

此次导师给安排的任务是将下面两幅图像融合成一幅清晰的图像,根据图像可以看出第一幅图像左清晰右模糊,第二幅图像相反,通过图像融合将两幅图像融合为一幅左右都清晰的图像。
在这里插入图片描述
在这里插入图片描述
代码如下:

import numpy as np
import cv2 as cv

def fangcha(img):
    row=img.shape[0]
    col=img.shape[1]
    varImg=np.zeros([row,col])
    for i in range(row):#求取求方差范围
        for j in range(col):
            if i-5>0:
                up=i-5
            else:
               up=0
            if i+5<row:
                down=i+5
            else:
                down=row
            if j-5>0:
                left=j-5
            else:
                left=0
            if j+5<col:
                right=j+5
            else:
                right=col
            window=img[up:down,left:right]
            mean,var=cv.meanStdDev(window)#调用OpenCV函数求取均值和方差
            varImg[i,j]=var
    return varImg

def qiuquan(img1,img2):
    row=img1.shape[0]
    col=img1.shape[1]
    array1=fangcha(img1)#调用求方差函数
    array2=fangcha(img2)
    for i in range(row):#求权
        for j in range(col):
            weight1=array1[i,j]/(array1[i,j]+array2[i,j])
            weight2=array2[i,j]/(array1[i,j]+array2[i,j])
            array1[i,j]=weight1
            array2[i,j]=weight2
    return array1,array2

def ronghe(img1,img2):
    cc = img1.copy()
    b,g,r=cv.split(img1)#分通道处理
    b1,g1,r1=cv.split(img2)
    weight1,weight2=qiuquan(b,b1)#调用求权重函数
    weight11,weight22=qiuquan(g,g1)
    weight111,weight222=qiuquan(r,r1)
    new_img=img1*1
    row=new_img.shape[0]
    col=new_img.shape[1]
    b2,g2,r2 = cv.split(cc)
    for i in range(row):#图像融合
        for j in range(col):
            b2[i,j]=(weight1[i,j]*b[i,j]+weight2[i,j]*b1[i,j]).astype(int)
            g2[i,j]=(weight11[i,j]*g[i,j]+weight22[i,j]*g1[i,j]).astype(int)
            r2[i,j]=(weight111[i,j]*r[i,j]+weight222[i,j]*r1[i,j]).astype(int)
    new_img=cv.merge([b2,g2,r2])#通道合并
    return new_img

img1=cv.imread("D:/s1.jpg")
img2=cv.imread("D:/s2.jpg")
img3=ronghe(img1,img2)
cv.imshow("img1",img1)
cv.imshow("img2",img2)
cv.imshow("img3",img3)
cv.waitKey(0)
cv.destroyAllWindows()

编写原理:
1 将两幅图片分通道处理;
2 分别取两幅图片的RGB图;
3 例如,将两幅图像的R通道图进行求权处理,然后将各个图像的权值乘像素点灰度值相加;
4 GB通道图同理。

景深融合是一种在图像处理中常用的技术,用于将具有不同焦点位置的多张图像合成为一张具有统一焦点位置的图像。而OpenCV是一个开源的计算机视觉库,提供了各种图像处理和计算机视觉相关的函数和算。 在OpenCV中,我们可以使用一些函数和方来实现景深融合。首先,我们需要采集一组具有不同焦点位置的图像,可以使用一台支持自动对焦的相机来拍摄这些图像。然后,我们使用OpenCV的函数来对这些图像进行处理。 在OpenCV中,我们可以使用图像金字塔和拉普拉斯金字塔来实现多尺度图像的处理。具体来说,我们可以使用OpenCV中的函数pyrDown和pyrUp来对图像进行减小和放大操作,以实现多尺度处理。接下来,我们可以使用拉普拉斯金字塔对原始图像进行高通滤波,得到图像的细节信息。通过对不同焦点位置的图像进行多尺度处理和高通滤波,我们可以得到一组具有统一焦点位置的图像。 最后,我们可以使用OpenCV的函数addWeighted将这些处理过的图像进行融合,得到一张具有统一焦点位置的图像。在融合过程中,我们可以根据图像的焦点位置和深度信息来调整不同图像的权重,以达到更好的融合效果。融合完成后,我们可以得到一张具有较大景深范围的图像。 综上所述,OpenCV提供了一些函数和方,可以用于实现景深融合。通过对多张具有不同焦点位置的图像进行多尺度处理和高通滤波,再进行图像融合,我们可以得到一张具有统一焦点位置的图像,拥有较大的景深范围。这为我们在图像处理和计算机视觉应用中提供了更多的可能性。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值