可见光和红外图像的融合

这篇具有很好参考价值的文章主要介绍了可见光和红外图像的融合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

3种较为简单的可见光和红外图像融合方式,包括固定权重的融合、TIF方式等:

import pywt
import cv2
import numpy as np
import threading

class ImgFusion:
    def TIF_algo(self,p1, p2, median_blur_value=3, mean_blur_value=35):
        p1_b = cv2.blur(p1, (mean_blur_value, mean_blur_value))
        p1_b = p1_b.astype(np.float)
        p2_b = cv2.blur(p2, (mean_blur_value, mean_blur_value))
        p2_b = p2_b.astype(np.float)
        # cv2.imshow('picture after mean blur p1_b', p1_b)
        # cv2.imshow('picture after mean blur p2_b', p2_b)

        # p1_d = abs(p1.astype(np.float) - p1_b)
        # p2_d = abs(p2.astype(np.float) - p2_b)
        p1_d = p1.astype(np.float) - p1_b
        p2_d = p2.astype(np.float) - p2_b
        # cv2.imshow('detail layer p1', p1_d / 255.0)
        # cv2.imshow('detail layer p2', p2_d / 255.0)

        p1_after_medianblur = cv2.medianBlur(p1, median_blur_value)
        p2_after_medianblur = cv2.medianBlur(p2, median_blur_value)
        # cv2.imshow('picture after median blur p1_after_medianblur', p1_after_medianblur)
        # cv2.imshow('picture after median blur p2_after_medianblur', p2_after_medianblur)

        p1_after_medianblur = p1_after_medianblur.astype(np.float)
        p2_after_medianblur = p2_after_medianblur.astype(np.float)


        p1_subtract_from_median_mean = p1_after_medianblur - p1_b + 0.0001
        p2_subtract_from_median_mean = p2_after_medianblur - p2_b + 0.0001
        # cv2.imshow('subtract_from_median_mean  p1_subtract_from_median_mean', p1_subtract_from_median_mean/255.0)
        # cv2.imshow('subtract_from_median_mean  p2_subtract_from_median_mean', p2_subtract_from_median_mean/255.0)
        m1 = p1_subtract_from_median_mean[:, :, 0]
        m2 = p1_subtract_from_median_mean[:, :, 1]
        m3 = p1_subtract_from_median_mean[:, :, 2]
        res = m1 * m1 + m2 * m2 + m3 * m3
        # delta1 = np.sqrt(res)
        delta1 = res
        m1 = p2_subtract_from_median_mean[:, :, 0]
        m2 = p2_subtract_from_median_mean[:, :, 1]
        m3 = p2_subtract_from_median_mean[:, :, 2]
        res = m1 * m1 + m2 * m2 + m3 * m3

        delta2 = abs(m1)

        delta_total = delta1 + delta2

        psi_1 = delta1 / delta_total
        psi_2 = delta2 / delta_total
        psi1 = np.zeros(p1.shape, dtype=np.float)
        psi2 = np.zeros(p2.shape, dtype=np.float)
        psi1[:, :, 0] = psi_1
        psi1[:, :, 1] = psi_1
        psi1[:, :, 2] = psi_1
        psi2[:, :, 0] = psi_2
        psi2[:, :, 1] = psi_2
        psi2[:, :, 2] = psi_2
        
        p_b = 0.5 * (p1_b + p2_b)
        # cv2.imshow('base pic1', p1_b / 255.0)
        # cv2.imshow('base pic2', p2_b / 255.0)
        # cv2.imshow('base pic', p_b / 255.0)

        p_d = psi1 * p1_d + psi2 * p2_d
        # cv2.imshow('detail layer plus', p_d / 255.0)
        # cv2.imshow('detail pic plus psi1 psi1 * p1_d', psi1 * p1_d)
        # cv2.imshow('detail pic plus psi1 psi2 * p2_d', psi2 * p2_d)
        p = p_b + p_d
        # img = cv2.cvtColor(p, cv2.COLOR_BGR2RGB)
        # cv2.imshow('final result', p / 255.0)
        # cv2.imwrite('./final_res.jpg', p)
        # cv2.waitKey(0)
        
        return p
        
    def strategy(self,arr_hvd1,arr_hvd2):
        k1 = 0.8
        k2 = 0.2
        arr_w1 = np.where( np.abs(arr_hvd1) > np.abs(arr_hvd2), k1, k2)
        arr_w2 = np.where( np.abs(arr_hvd1) < np.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 = cv2.resize(arr_visible, (it_w1, it_h1))
        arr_infrared = cv2.resize(arr_infrared, (it_w2, it_h2))

        it_level = 5

        arr_Gray1,arr_Gray2 = cv2.cvtColor(arr_visible, cv2.COLOR_BGR2GRAY), cv2.cvtColor(arr_infrared, cv2.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)

        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 = np.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

img_rgb=cv2.imread('./rgb.jpg')
img_t=cv2.imread('./t.jpg')
f=ImgFusion()
#five ways of fusion
img_f = f.TIF_algo(img_rgb, img_t)
#img_f = f.fusion(img_rgb,img_t)
#img_f =cv2.addWeighted(img_rgb,0.5, img_t,0.5,0)
#img_f = np.where(img_f > 255.0, 255.0,img_f)
#img_f = np.where(img_f < 0.0, 0.0,img_f)

采用均分权重(代码里倒数第三行的)的融合效果:(可见光、红外、融合) 

可见光红外图像融合,opencv,python,计算机视觉可见光红外图像融合,opencv,python,计算机视觉可见光红外图像融合,opencv,python,计算机视觉文章来源地址https://www.toymoban.com/news/detail-576623.html

到了这里,关于可见光和红外图像的融合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【红外与可见光图像融合】离散平稳小波变换域中基于离散余弦变换和局部空间频率的红外与视觉图像融合方法(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码及文献 基于

    2024年02月07日
    浏览(44)
  • 图像融合论文阅读:CS2Fusion: 通过估计特征补偿图谱实现自监督红外和可见光图像融合的对比学习

    @article{wang2024cs2fusion, title={CS2Fusion: Contrastive learning for Self-Supervised infrared and visible image fusion by estimating feature compensation map}, author={Wang, Xue and Guan, Zheng and Qian, Wenhua and Cao, Jinde and Liang, Shu and Yan, Jin}, journal={Information Fusion}, volume={102}, pages={102039}, year={2024}, publisher={Elsevier} } 论文级

    2024年01月22日
    浏览(52)
  • 红外图像和可见光图像异源图像配准问题研究

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 图像配准方法有很多,可分为基于灰度的图像配准方法和基于特征的图像配准方法,其中基于特征的图像配准方法是目前图像配准算法中常用方法,如尺度不变特征变换(Scale Invariant Feature Transform, SIF

    2023年04月11日
    浏览(37)
  • 多模态(红外,可见光)目标检测

    【github】https://github.com/DocF/multispectral-object-detection 基本依赖和yolov5基本相同,当然也可以配置在虚拟环境中 1.2.1 找不到sppf 【参考文章】找不到SPPF错误 在models/common.py下找到ssp,将下面这段添加到ssp之前 1.2.2 【参考】报错解决方法 将下面这段替换utils/loss.py中build_targets函数

    2024年02月02日
    浏览(40)
  • 基于LED或红外激光的可见光音频系统

      1 前言         可见光通信技术 , 简称为 VLC ,这种技术手段在无线通信领域中最新成型,便能得以快速发展壮大。在接下来的一段时间之内,无论是在哪个领域,该项技术肯定会有很大的发展,跟现有的无线通信技术形成强有力的竞争,对人类文明的进步产生巨大的影响

    2024年02月11日
    浏览(40)
  • 热红外相机图片与可见光图片配准教程

    图像配准是一种图像处理技术,用于将多个场景对齐到单个集成图像中。在这篇文章中,我将讨论如何在可见光及其相应的热图像上应用图像配准。在继续该过程之前,让我们看看什么是热图像及其属性。 热图像本质上通常是灰度图像:黑色物体是冷的,白色物体是热的,灰

    2024年02月07日
    浏览(36)
  • ADAS-可见光相机之Cmos Image Sensor

    “ 可见光相机在日常生活、工业生产、智能制造等应用有着重要的作用。在ADAS中更是扮演着重要的角色,如tesla model系列全车身10多个相机,不断感知周围世界。本文着重讲解下可见光相机中的CIS(CMOS Image Sensor)。” 光是一种电磁波,自然界的光是由各种波长的电磁波组成,

    2024年02月09日
    浏览(39)
  • 【图像融合】Dif-Fusion:基于扩散模型的红外/可见图像融合方法

    颜色在人类的视觉感知中起着重要的作用,反映了物体的光谱。然而, 现有的红外和可见光图像融合方法很少探索如何直接处理多光谱/通道数据,并实现较高的彩色保真度 。本文提出了一种 利用扩散模型diffusion来生成多通道输入数据的分布 ,提高了多源信息聚合的能力和

    2024年02月09日
    浏览(79)
  • 图像合成——OpenCV-Python图像融合详解

    图像合成——OpenCV-Python图像融合详解 在图像处理中,图像的合成是一项重要的任务。OpenCV提供了许多方法来实现图像合成。其中,cv::addWeighted()函数是一种常用的图像融合方法。它可以将两张图片以一定的权重相加,产生一张新的融合图像。 下面我们将详细讲解OpenCV中的c

    2024年02月14日
    浏览(47)
  • python的opencv操作记录(十)——图像融合

    最近碰到一个项目上的难题,是要从电动显微镜对焦的多张图像进行融合。因为,显微镜物镜的景深范围较小,可能在同一视野中有多个需要拍摄的物体位于不同的景深范围内,所以想通过图像的融合,将不同景深上的多张图像进行融合,从而把这些物体都在同一张图像中对

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包