基于小波变换的图像融合(附加视频融合)代码

在这里插入图片描述

一、小波变换

小波分析是一个比较难的分支,用户采用小波变换,可以实现图像压缩,振动信号的分解与重构等,因此在实际工程上应用较广泛。小波分析与Fourier变换相比,小波变换是空间域和频率域的局部变换,因而能有效地从信号中提取信息。小波变换通过伸缩和平移等基本运算,实现对信号的多尺度分解与重构,从而很大程度上解决了Fourier变换带来的很多难题。
小波分析作一个新的数学分支,它是泛函分析、Fourier分析、数值分析的完美结晶;小波分析也是一种“时间—尺度”分析和多分辨分析的新技术,它在信号分析、语音合成、图像压缩与识别、大气与海洋波分析等方面的研究,都有广泛的应用。

二、图像融合

1、采用对比度拉伸,完成红外图像增强

# 裁剪线性RGB对比度拉伸:(去掉2%百分位以下的数,去掉98%百分位以上的数,上下百分位数一般相同,并设置输出上下限)
def truncated_linear_stretch(image, truncated_value=2, maxout=255, min_out=0):
    def gray_process(gray, maxout=maxout, minout=min_out):
        truncated_down = np.percentile(gray, truncated_value)
        truncated_up = np.percentile(gray, 100 - truncated_value)
        gray_new = ((maxout - minout) / (truncated_up - truncated_down)) * gray
        gray_new[gray_new < minout] = minout
        gray_new[gray_new > maxout] = maxout
        return np.uint8(gray_new)
    (b, g, r) = cv2.split(image)
    b = gray_process(b)
    g = gray_process(g)
    r = gray_process(r)
    result = cv2.merge((b, g, r))# 合并每一个通道
    return result

2、采用Surf特征点匹配,完成图像配准

# RGB图片配准函数,采用白天的可见光与红外灰度图,计算两者Surf共同特征点,之间的仿射矩阵。
def Images_matching(img_base, img_target):
    img_base=cv2.cvtColor(img_base, cv2.COLOR_BGR2GRAY)
    img_target=cv2.cvtColor(img_target, cv2.COLOR_BGR2GRAY)
    hessian = 400
    # 初始化surf算子
    surf = cv2.xfeatures2d.SURF_create(hessian)
    # surf = cv2.xfeatures2d_SURF.create(hessian)
    # surf = cv2.SIFT_create(hessian)
    # 使用surf算子计算特征点和特征点周围的特征向量
    kp1, des1 = surf.detectAndCompute(img_base, None)  # 1136    1136, 64
    kp2, des2 = surf.detectAndCompute(img_target, None)
    # 进行KNN特征匹配
    FLANN_INDEX_KDTREE = 0  # 建立FLANN匹配器的参数
    indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)  # 配置索引,密度树的数量为5
    searchParams = dict(checks=50)  # 指定递归次数
    flann = cv2.FlannBasedMatcher(indexParams, searchParams)  # 建立匹配器
    good = []
    # 提取优秀的特征点
    for m, n in matches:
        if m.distance < 0.7 * n.distance:  # 如果第一个邻近距离比第二个邻近距离的0.7倍小,则保
    src_pts = np.array([kp1[m.queryIdx].pt for m in good])  # 查询图像的特征描述子索引  # 134, 2
    dst_pts = np.array([kp2[m.trainIdx].pt for m in good])  # 训练(模板)图像的特征描述子索引
    H = cv2.findHomography(dst_pts, src_pts, cv2.RANSAC)  # 生成变换矩阵  H[0]: 3, 3  H[1]: 134, 1
    return H[0]

3、采用HSV通道小波变换,完成图像融合

# YUV通道小波变换RGB融合,低频均值高频最大值
def Images_fusion(img_base,img_target):          # 可见光,配准后的红外光
    # 按照不同的融合方式,计算通道融合
    def fuseCoeff(cooef1, cooef2, method):
        if (method == 'mean'):
            cooef = (abs(cooef1) + abs(cooef2)) / 2  # abs 绝对值
            # cooef=0.5*cooef1+1.5*cooef2
        elif (method == 'min'):
            cooef = np.minimum(cooef1, cooef2)
        elif (method == 'max'):
            cooef = np.maximum(abs(cooef1), abs(cooef2))
        return cooef
    # HSV的小波融合过程
    LOW_METHOD = 'mean'
    HIGH_METHOD = 'max'
    YUVimg_base = cv2.cvtColor(img_base, cv2.COLOR_BGR2YUV)  # 可见光转换为HSV
    # cv2.imwrite("D:/VS/vsprj/cuda/cudawavetest/2.jpg", YUVimg_base)
    grayimg_target = cv2.cvtColor(img_target, cv2.COLOR_BGR2GRAY)  #红外灰度化
    # cv2.imwrite("D:/VS/vsprj/cuda/cudawavetest/1.jpg",grayimg_target)
    Yimg_base = YUVimg_base[:, :, 0]  # 1024,1024
    wavelet = 'haar'
    cooef_base = pywt.wavedec2(Yimg_base[:, :], wavelet, level=1)  # base灰度图的小波展开  512, 512    3
    start = time.time()
    cooef_target = pywt.wavedec2(grayimg_target[:, :], wavelet, level=1)  # target灰度图的小波展开   512, 512    3
    end = time.time()-start
    print("小波展开:{}".format(end))
    fusedCooef = []
    for i in range(len(cooef_base)):
    tempfusedImage = pywt.waverec2(fusedCooef, wavelet)  # 小波逆变换
    fusedImage = np.multiply(np.divide(tempfusedImage - np.min(tempfusedImage), (np.max(tempfusedImage) -\
                            np.min(tempfusedImage))), 255)  # 逆变换后归一至(0,255)
    start = time.time()
    fusedImage = fusedImage.astype(np.uint8)
    Yimg_new = fusedImage
    fusedYUV = cv2.merge([Yimg_new, YUVimg_base[:, :, 1], YUVimg_base[:, :, 2]])  # 用小波变换替换V通道
    end = time.time() - start
    print("图像重建:{}".format(end))
    fusedBGR = cv2.cvtColor(fusedYUV, cv2.COLOR_YUV2BGR)  # 融合后的HSV转为BGR
    return fusedBGR

4、总的代码

import cv2
import numpy as np
import pywt #引入小波模块
import time
from PIL import Image

# 裁剪线性RGB对比度拉伸:(去掉2%百分位以下的数,去掉98%百分位以上的数,上下百分位数一般相同,并设置输出上下限)
def truncated_linear_stretch(image, truncated_value=2, maxout=255, min_out=0):
    def gray_process(gray, maxout=maxout, minout=min_out):
        truncated_down = np.percentile(gray, truncated_value)
        truncated_up = np.percentile(gray, 100 - truncated_value)
        gray_new = ((maxout - minout) / (truncated_up - truncated_down)) * gray
        gray_new[gray_new < minout] = minout
        gray_new[gray_new > maxout] = maxout
        return np.uint8(gray_new)
    (b, g, r) = cv2.split(image)
    b = gray_process(b)
    g = gray_process(g)
    r = gray_process(r)
    result = cv2.merge((b, g, r))# 合并每一个通道
    return result

# RGB图片配准函数,采用白天的可见光与红外灰度图,计算两者Surf共同特征点,之间的仿射矩阵。
def Images_matching(img_base, img_target):
    img_base=cv2.cvtColor(img_base, cv2.COLOR_BGR2GRAY)
    img_target=cv2.cvtColor(img_target, cv2.COLOR_BGR2GRAY)
    hessian = 400
    # 初始化surf算子
    surf = cv2.xfeatures2d.SURF_create(hessian)
    # surf = cv2.xfeatures2d_SURF.create(hessian)
    # surf = cv2.SIFT_create(hessian)
    # 使用surf算子计算特征点和特征点周围的特征向量
    kp1, des1 = surf.detectAndCompute(img_base, None)  # 1136    1136, 64
    kp2, des2 = surf.detectAndCompute(img_target, None)
    # 进行KNN特征匹配
    FLANN_INDEX_KDTREE = 0  # 建立FLANN匹配器的参数
    indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)  # 配置索引,密度树的数量为5
    searchParams = dict(checks=50)  # 指定递归次数
    flann = cv2.FlannBasedMatcher(indexParams, searchParams)  # 建立匹配器
    matches = flann.knnMatch(des1, des2, k=2)  # 得出匹配的关键点  list: 1136
    good = []
    # 提取优秀的特征点
    for m, n in matches:
        if m.distance < 0.7 * n.distance:  # 如果第一个邻近距离比第二个邻近距离的0.7倍小,则保留
    src_pts = np.array([kp1[m.queryIdx].pt for m in good])  # 查询图像的特征描述子索引  # 134, 2
    dst_pts = np.array([kp2[m.trainIdx].pt for m in good])  # 训练(模板)图像的特征描述子索引
    H = cv2.findHomography(dst_pts, src_pts, cv2.RANSAC)  # 生成变换矩阵  H[0]: 3, 3  H[1]: 134, 1
    return H[19]

# YUV通道小波变换RGB融合,低频均值高频最大值
def Images_fusion(img_base,img_target):          # 可见光,配准后的红外光
    # 按照不同的融合方式,计算通道融合
    def fuseCoeff(cooef1, cooef2, method):
        if (method == 'mean'):
            cooef = (abs(cooef1) + abs(cooef2)) / 2  # abs 绝对值
            # cooef=0.5*cooef1+1.5*cooef2
        elif (method == 'min'):
            cooef = np.minimum(cooef1, cooef2)
        elif (method == 'max'):
            cooef = np.maximum(abs(cooef1), abs(cooef2))
        return cooef
    # HSV的小波融合过程
    LOW_METHOD = 'mean'
    HIGH_METHOD = 'max'
    YUVimg_base = cv2.cvtColor(img_base, cv2.COLOR_BGR2YUV)  # 可见光转换为HSV
    # cv2.imwrite("D:/VS/vsprj/cuda/cudawavetest/2.jpg", YUVimg_base)
    grayimg_target = cv2.cvtColor(img_target, cv2.COLOR_BGR2GRAY)  #红外灰度化
    # cv2.imwrite("D:/VS/vsprj/cuda/cudawavetest/1.jpg",grayimg_target)
    Yimg_base = YUVimg_base[:, :, 0]  # 1024,1024
    wavelet = 'haar'
    cooef_base = pywt.wavedec2(Yimg_base[:, :], wavelet, level=1)  # base灰度图的小波展开  512, 512    3
    start = time.time()
    cooef_target = pywt.wavedec2(grayimg_target[:, :], wavelet, level=1)  # target灰度图的小波展开   512, 512    3
    end = time.time()-start
    print("小波展开:{}".format(end))
    fusedCooef = []
    for i in range(len(cooef_base)):
    tempfusedImage = pywt.waverec2(fusedCooef, wavelet)  # 小波逆变换
    fusedImage = np.multiply(np.divide(tempfusedImage - np.min(tempfusedImage), (np.max(tempfusedImage) -\
                            np.min(tempfusedImage))), 255)  # 逆变换后归一至(0,255)
    start = time.time()
    fusedImage = fusedImage.astype(np.uint8)
    Yimg_new = fusedImage
    fusedYUV = cv2.merge([Yimg_new, YUVimg_base[:, :, 1], YUVimg_base[:, :, 2]])  # 用小波变换替换V通道
    end = time.time() - start
    print("图像重建:{}".format(end))
    fusedBGR = cv2.cvtColor(fusedYUV, cv2.COLOR_YUV2BGR)  # 融合后的HSV转为BGR
    return fusedBGR
#
def main():
    matchimg_di = cv2.imread('images/oripics/basic_day_infrared.jpg')  # 1080, 1920, 3
    matchimg_dv = cv2.imread('images/oripics/basic_day_visual.jpg')
    # matchimg_di = cv2.imread('left_2020_11_30-15_15_31.jpg')  # 1080, 1920, 3
    # matchimg_dv = cv2.imread('right_2020_11_30-15_15_31.jpg')
    # 1080, 1920, 3
    orimg_nv=matchimg_dv
    orimg_ni=matchimg_di
    # orimg_nv = cv2.imread('images/oripics/night_visual_40m.jpg')
    # orimg_ni = cv2.imread('images/oripics/night_infrared_40m.jpg')
    # orimg_nv = cv2.imread('images/oripics/left_2020_11_30-20_06_54.jpg')
    # orimg_ni = cv2.imread('images/oripics/right_2020_11_30-20_06_54.jpg')
    # orimg_nv = cv2.imread('images/oripics/left_2020_11_30-20_08_09.jpg')
    # orimg_ni = cv2.imread('images/oripics/right_2020_11_30-20_08_09.jpg')
    orimg_nv = cv2.imread('images/oripics/left_video_2020_11_30-20_09_32_73.jpg')  # 1024, 1024, 3
    orimg_ni = cv2.imread('images/oripics/right_video_2020_11_30-20_09_32_73.jpg')  # 1024, 1024, 3

    #用白天图像进行配准
    # enhance_matchimg_di = truncated_linear_stretch(matchimg_di)# 配准模板红外图像RGB增强
    h, w = orimg_nv.shape[:2]   # 1024 1024
    H = Images_matching(matchimg_dv, matchimg_di)   # (3, 3)

    # enhance_orimg_ni=truncated_linear_stretch(orimg_ni) # 需融合红外图像RGB增强
    matched_ni = cv2.warpPerspective(orimg_ni, H, (w, h))
    cv2.imwrite("./1.jpg",matched_ni)# 红外图像按照仿射矩阵配准 1024, 1024, 3
    start = time.time()
    fusion = Images_fusion(orimg_nv, matched_ni)
    cv2.imwrite("./2.jpg",fusion)
    end = time.time()-start
    print(end)
    # enhance=truncated_linear_stretch(fusion)#融合图像RGB增强

    # cv2.imshow('0', cv2.resize(orimg_nv, (600, 400)))
    # cv2.imshow('1', cv2.resize(orimg_ni, (600, 400)))
    cv2.imshow('2', cv2.resize(fusion, (1200, 800)))
    cv2.waitKey(0)

    # name_fusionfile='YUV_04.jpg'
    # path_fusionfile='images/fusion/'+name_fusionfile
    # cv2.imwrite(path_fusionfile, fusion)
if __name__ == '__main__':
    main()    

5、融合效果 上图

红外:
在这里插入图片描述
可见光:
在这里插入图片描述

融合后,效果一般,但是将就看吧,熟悉一下融合过程。在这里插入图片描述

三、视频融合

一个可见光摄像头,一个红外摄像头,就可以实现实时夜间车外图像融合啦

video_path_infrared = "../videos/ir/video_2020_11_30-20_05_30.avi"
    video_path_visible = "../videos/vi/video_2020_11_30-20_05_30.avi"
    video_save_path = "../videos/out.avi"
    video_fps = 25

    # matchimg_di = cv2.imread('images/oripics/basic_day_infrared.jpg')  # 1080, 1920, 3
    # matchimg_dv = cv2.imread('images/oripics/basic_day_visual.jpg')
    matchimg_di = cv2.imread('left_2020_11_30-15_15_31.jpg')  # 1080, 1920, 3
    matchimg_dv = cv2.imread('right_2020_11_30-15_15_31.jpg')
    H = Images_matching(matchimg_dv, matchimg_di)

    capture_in = cv2.VideoCapture(video_path_infrared)
    capture_vi = cv2.VideoCapture(video_path_visible)
    if video_save_path != "":
        fourcc = cv2.VideoWriter_fourcc(*'XVID')
        size = (int(capture_vi.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capture_vi.get(cv2.CAP_PROP_FRAME_HEIGHT)))
        out = cv2.VideoWriter(video_save_path, fourcc, video_fps, size)

    fps = 0.0
    while (True):
        t1 = time.time()
        # 读取某一帧
        ref1, frame1 = capture_in.read()
        ref2, frame2 = capture_vi.read()
        # 格式转变,BGRtoRGB
        frame1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2RGB)
        frame2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2RGB)
        # 转变成Image
        # frame1 = Image.fromarray(np.uint8(frame1))
        # frame2 = Image.fromarray(np.uint8(frame2))
        h, w = frame1.shape[:2]
        matched_ni = cv2.warpPerspective(frame2, H, (w, h))
        cv2.imwrite("./1.jpg", matched_ni)
        # 进行检测
        fusion = Images_fusion(frame1, matched_ni)
        fusion = np.array(fusion)
        end = time.time() - t1
        # RGBtoBGR满足opencv显示格式
        frame = cv2.cvtColor(fusion, cv2.COLOR_RGB2BGR)

        fps = (fps + (1. / end )) / 2
        print("fps= %.2f" % (fps))
        frame = cv2.putText(frame, "fps= %.2f" % (fps), (0, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

        cv2.imshow("video", frame)
        c = cv2.waitKey(1) & 0xff
        if video_save_path != "":
            out.write(frame)

        if c == 27:
            capture.release()
            break
    capture.release()
    out.release()
    cv2.destroyAllWindows()

一定选对配准图片,不然会出现鬼影

四、总结

这个方法试出来视频融合的时候如何加速,大家如果有什么好方法,多教教我!

  • 13
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
图 像 融 合 是一 种 重要的 增 强 图 像信 息的 技术方 法 , 如 何 对 同 一 目 标 的多 源 遥 感 图 像 数 据 进 行有效 的融 合 , 最 大 限 度 地利 用 多 源 遥 感 数据 中 的 有 用 信 息 , 提 高 系 统的 正 确 识 别 、 判 断 和 决 策 能力 , 这是 遥感 数 据融 合研 究 的重要 内容之 一 。 图 像 融 合 技 术 的 发 展 经 历了 3 个阶段 : ( l ) 简单 的 图 像 融 合方 法 , 如 R G B 假彩色 合 成 、 I H S 彩 色 变 换 、 P CA 主 分 量 变换 法 等 ; ( 2 ) 随 着 塔 式算 子的提 出 , 在融 合领域 也出现 了 一 些较为复杂 的 模 型 ; ( 3 ) 用 小波 变换 的多 尺 度分 析 替代塔 式 算 法 。 传 统的图 像 数 据 融 合 方法对 中 、 高 分辨率 的遥 感 图 像 的 数据 融 合 一 般 都 能 取 得 比 较理 想的 效 果 , 但 对 于 低 分 辨率 的 遥 感 图 像 数 据 融 合 效 果 并 不 明 显 。 具 有 “ 数学 显 微 镜 ” 之称 的 小波变换 同时 在 时 域 和 频 域 具有分 辨率 , 对 高 频 分 量 采 用 逐 渐 精 细的 时域或 空 域 步 长 , 可 以 聚 焦 到 分析 对 象 的 任 意细节 , 对 于 剧 烈 变化 的 边 缘 , 比 常 规 的 傅 里 叶 变换 具有更 好 的适 应性 。 由 于 小波变换具有 的 特 点 , 使 它 很快在 图 像 处理 中 得 到 广 泛的应 用 。 与 传 统的 数据 融 合方 法相 比 , 小波融 合 方 法 不 仅 能 够 针 对 输 人图 像 的 不 同 特 征 来 合 理选择小波 基 以 及小 波 变 换 的次 数 , 而 且在融 合 操 作 时 又 可 以 根 据 实 际 需 要 来引 人 双方的细节 信 息 。 从 而 表 现 出 更 强 的针对 性 和 实 用 性 , 融 合效 果更 好 。 另 外 , 从实施 过程 的 灵 活性 方 面 评 价 , IH S 彩色变换 只 能 而且 必须 同 时对 三 个波 段 进行融 合 操 作 , P C A 主 分 量变换 法 的 输 人 图 像 必 须有 三 个或 三 个 以 上 , 而 小 波方 法则 能够完成 对 单 一 波 段 或多 个波 段 的 融 合 运 算 , 对 于 单 个 黑 白 图 像 的 融 合 , 小波 方 法 更 是唯一的选 择 。 本 文 提出 了 一种基 于 小波变 换 的 融 合方 法 , 使 得融 合 图 像 在最 大 限 度 保 留 多波段光 谱 信 息 的 同时 , 提 高 了 清 晰 度 和空 间 分 辨 率 。 并 在 M A T L A B 环 境 下 对 该方 法 进行 了 实 例 分 析 , 从 图 像 清 晰度 、 信 息墒 、 信 噪 比 等 几 个 方 面 对结 果 做 了 深 人的 分 析 与 对 比 , 发现 融 合 后的 图 像 均 值 和 方 差 基 本 保持 不 变 , 图 像 信 噪 比 为 ZO db 左右 , 说 明 融 合 后 的 图 像 基 本保持 了 原 始 图 像 的光 谱 特 性 , 而 信 息 嫡 和 清 晰度 有 明 显 的 提高 。 因 此基 于 小 波 变换 的 M a l l a t 多分辨 率 分 析 可 有 效 地 用 于 低分 辨 率多光 谱 遥 感 图 像 的 数 据 融 合 , 融 合 后 的图 像 在 信 息 含量 、
### 回答1: 基于小波变换图像融合在matlab中的实现可以分为以下几步: 1. 读取需要融合的两幅图像。 2. 对两幅图像进行小波变换,可以选择Haar小波或其他类型的小波。 ```matlab [C1, S1] = wavedec2(I1, n, 'db1'); [C2, S2] = wavedec2(I2, n, 'db1'); ``` 这里使用了`wavedec2`函数对图像进行二维小波变换,其中`I1`和`I2`分别表示两幅图像,`n`表示小波变换的层数,`'db1'`表示使用Haar小波进行变换。 3. 对小波系数进行融合,可以选择不同的融合规则,比如平均法、极大选取法、小波能量法等。 ```matlab alpha = 0.5; % 融合参数,可调整 C = alpha * C1 + (1 - alpha) * C2; ``` 这里使用了简单的线性加权公式来进行系数融合,`alpha`为融合参数,可以根据实际情况进行调整。 4. 对融合后的小波系数进行逆变换。 ```matlab If = waverec2(C, S1, 'db1'); ``` 这里使用`waverec2`函数对融合后的小波系数进行逆变换,`S1`为第一幅图像的小波分解结果,和`wavedec2`函数中的结果相对应。 5. 对逆变换得到的图像进行灰度范围调整。 ```matlab If = mat2gray(If); ``` 这里使用`mat2gray`函数将逆变换得到的图像灰度范围归一化到[0, 1]。 6. 显示融合后的图像。 ```matlab figure; subplot(1, 3, 1); imshow(I1); title('原图1'); subplot(1, 3, 2); imshow(I2); title('原图2'); subplot(1, 3, 3); imshow(If); title('融合图像'); ``` 这里使用`imshow`函数将原图和融合图像显示在子图中。 以上是基于小波变换图像融合的简单实现,可以根据实际需求对各个步骤进行适当修改和调整。 ### 回答2: 小波变换是一种广泛应用于图像处理的方法,可以用于图像融合。基于小波变换图像融合matlab代码如下: 1. 首先导入需要融合的两幅图像。 ```matlab image1 = imread('image1.jpg'); image2 = imread('image2.jpg'); ``` 2. 将两幅图像转为灰度图像。 ```matlab gray_image1 = rgb2gray(image1); gray_image2 = rgb2gray(image2); ``` 3. 对两幅灰度图像进行小波变换。 ```matlab [cA1, cH1, cV1, cD1] = dwt2(gray_image1, 'db1'); [cA2, cH2, cV2, cD2] = dwt2(gray_image2, 'db1'); ``` 4. 对低频子带进行加权融合。 ```matlab alpha = 0.5; % 融合参数 cA_fused = alpha * cA1 + (1 - alpha) * cA2; ``` 5. 对高频子带进行加权融合。 ```matlab cH_fused = alpha * cH1 + (1 - alpha) * cH2; cV_fused = alpha * cV1 + (1 - alpha) * cV2; cD_fused = alpha * cD1 + (1 - alpha) * cD2; ``` 6. 重构融合后的图像。 ```matlab fused_image = idwt2(cA_fused, cH_fused, cV_fused, cD_fused, 'db1'); ``` 7. 显示融合后的图像。 ```matlab imshow(fused_image); ``` 以上代码使用了db1小波基函数进行小波变换,alpha为融合参数,可根据实际需求进行调整。融合后的图像可以通过imshow函数显示出来,可以保存为图像文件。 ### 回答3: 基于小波变换图像融合是一种常用的图像融合方法,可以将多幅图像的细节信息进行融合,得到一幅更清晰、更具有辨识度的融合图像。下面给出基于小波变换图像融合Matlab代码示例: 1. 导入需要融合的图像:img1和img2; 2. 对两幅图像进行小波变换,得到它们的高频子带和低频子带; 3. 对两幅图像的低频子带进行加权平均融合; 4. 对两幅图像的高频子带进行根据一定的规则进行融合,例如选择其中一个图像的高频子带保留,另一个图像的高频子带舍弃; 5. 将融合后的低频和高频子带合成一幅图像; 6. 执行逆小波变换,得到最终的融合图像; 7. 显示和保存融合图像。 具体代码示例如下: ```matlab % 导入需要融合的图像 img1 = imread('image1.jpg'); img2 = imread('image2.jpg'); % 执行小波变换 [cA1, cH1, cV1, cD1] = dwt2(img1, 'db4'); [cA2, cH2, cV2, cD2] = dwt2(img2, 'db4'); % 对低频子带进行加权平均融合 cA_fuse = (cA1 + cA2) / 2; % 对高频子带进行融合 cH_fuse = max(cH1, cH2); cV_fuse = max(cV1, cV2); cD_fuse = max(cD1, cD2); % 合并低频子带和高频子带 img_fuse = idwt2(cA_fuse, cH_fuse, cV_fuse, cD_fuse, 'db4'); % 显示和保存融合图像 imshow(uint8(img_fuse)); imwrite(uint8(img_fuse), 'fused_image.jpg'); ``` 以上代码中,使用db4小波进行小波变换和逆小波变换,通过加权平均和选择最大值的方式对低频和高频子带进行融合,最终得到融合图像并进行显示和保存操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值