• 黄琼男
    了解作者
  • Python
    开发工具
  • 3KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 6
    下载次数
  • 2020-05-18 16:23
    上传日期
基于小波变换的方法,需要自己准备已严格配准好的图像,并建立几个相应的文件夹存放,可以批量处理jpg、png格式的图片
红外和可见光图像融合.zip
  • 红外和可见光图像融合
  • ReadPNG.py
    1.7KB
  • ReadJPG.py
    1.7KB
  • Fusion.py
    3.8KB
  • ReadJPGBatch.py
    581B
内容介绍
import pywt,cv2 as cv,numpy as n class VIFusion: # 融合策略 def strategy(self,arr_hvd1,arr_hvd2): # 小波系数融合 k1 = 0.8 k2 = 0.2 arr_w1 = n.where( n.abs(arr_hvd1) > n.abs(arr_hvd2), k1, k2) arr_w2 = n.where( n.abs(arr_hvd1) < n.abs(arr_hvd2), k1, k2) return arr_w1,arr_w2 # 融合 def fusion(self, arr_visible, arr_infrared): # 进行小波变换的图像的长宽必须为偶数 it_h1 = arr_visible.shape[0] it_w1 = arr_visible.shape[1] it_h2 = arr_infrared.shape[0] it_w2 = arr_infrared.shape[1] if it_h1 % 2 != 0: it_h1 = it_h1 + 1 if it_w1 % 2 != 0: it_w1 = it_w1 + 1 if it_h2 % 2 != 0: it_h2 = it_h2 + 1 if it_w2 % 2 != 0: it_w2 = it_w2 + 1 arr_visible = cv.resize(arr_visible, (it_w1, it_h1)) arr_infrared = cv.resize(arr_infrared, (it_w2, it_h2)) # 小波分解层数 it_level = 5 # 对两个图像的灰度图进行小波变换 arr_Gray1,arr_Gray2 = cv.cvtColor(arr_visible, cv.COLOR_BGR2GRAY), cv.cvtColor(arr_infrared, cv.COLOR_BGR2GRAY) # 类型转换 arr_Gray1 = arr_Gray1*1.0 arr_Gray2 = arr_Gray2*1.0 arr_visible = arr_visible*1.0 arr_infrared = arr_infrared*1.0 # 分别对 可见光的灰度图 和 红外光的灰度图 进行小波变换 arr_decGray1 = pywt.wavedec2(arr_Gray1, 'sym4', level=it_level) arr_decGray2 = pywt.wavedec2(arr_Gray2, 'sym4', level=it_level) # 对可见光进行 RGB 进行小波变换 ls_decRed1 = pywt.wavedec2(arr_visible[:, :, 0], 'sym4', level=it_level) ls_decGreen1 = pywt.wavedec2(arr_visible[:, :, 1], 'sym4', level=it_level) ls_decBlue1 = pywt.wavedec2(arr_visible[:, :, 2], 'sym4', level=it_level) # 重构列表 ls_recRed = [] ls_recGreen = [] ls_recBlue = [] for it_i,(arr_gray1,arr_gray2,arr_red1,arr_green1,arr_blue1) in enumerate(zip(arr_decGray1,arr_decGray2,ls_decRed1,ls_decGreen1,ls_decBlue1)): if it_i == 0: # 低频 # 平均加权融合 fl_w1 = 0.5 fl_w2 = 0.5 us_recRed = fl_w1 * arr_red1 + fl_w2 * arr_gray2 us_recGreen = fl_w1 * arr_green1 + fl_w2 * arr_gray2 us_recBlue = fl_w1 * arr_blue1 + fl_w2 * arr_gray2 else: # 高频 #基于绝对值最大选取融合系数 us_recRed = [] us_recGreen = [] us_recBlue = [] for arr_grayHVD1,arr_grayHVD2,arr_redHVD1,arr_greenHVD1,arr_blueHVD1, in zip(arr_gray1,arr_gray2,arr_red1,arr_green1,arr_blue1): arr_w1,arr_w2 = self.strategy(arr_grayHVD1,arr_grayHVD2) arr_recRed = arr_w1*arr_redHVD1 + arr_w2*arr_grayHVD2 arr_recGreen = arr_w1*arr_greenHVD1 + arr_w2*arr_grayHVD2 arr_recBlue = arr_w1*arr_blueHVD1 + arr_w2*arr_grayHVD2 us_recRed.append(arr_recRed) us_recGreen.append(arr_recGreen) us_recBlue.append(arr_recBlue) # 重构列表添加 ls_recRed.append(us_recRed) ls_recGreen.append(us_recGreen) ls_recBlue.append(us_recBlue) # 重构 arr_rec = n.zeros(arr_visible.shape) arr_rec[:, :, 0] = pywt.waverec2(ls_recRed, 'sym4') arr_rec[:, :, 1] = pywt.waverec2(ls_recGreen, 'sym4') arr_rec[:, :, 2] = pywt.waverec2(ls_recBlue, 'sym4') return arr_rec
评论
    相关推荐