近红外与可见光图像融合的多种方法实现

我将介绍七种不同的近红外(NIR)与可见光(RGB)图像融合方法 这些方法各具特点,适用于不同的场景。

核心融合方法 matlab

function fusedImage = fuseNIR_RGB(nirPath, rgbPath, method, varargin)
    % 读取图像
    nir = im2double(imread(nirPath));
    rgb = im2double(imread(rgbPath));
    
    % 确保图像尺寸一致
    if ~isequal(size(nir), size(rgb(:,:,1)))
        nir = imresize(nir, [size(rgb,1), size(rgb,2)]);
    end
    
    % 选择融合方法
    switch lower(method)
        case 'weighted_average'
            % 加权平均法
            alpha = 0.6; % NIR权重
            if nargin > 3, alpha = varargin{
   
   1}; end
            fusedImage = alpha * nir + (1-alpha) * mean(rgb, 3);
            
        case 'ihs'
            % IHS变换融合
            hsv = rgb2hsv(rgb);
            fusedImage = hsv;
            fusedImage(:,:,3) = nir; % 用NIR替换亮度分量
            fusedImage = hsv2rgb(fusedImage);
            
        case 'wavelet'
            % 小波变换融合
            level = 3; % 分解层数
            if nargin > 3, level = varargin{
   
   1}; end
            
            % 对每个通道分别处理
            fusedRGB = zeros(size(rgb));
            for c = 1:3
                [C_rgb, S] = wavedec2(rgb(:,:,c), level, 'db4');
                [C_nir, ~] = wavedec2(nir, level, 'db4');
                
                % 融合规则:低频取平均,高频取绝对值最大
                fusedCoeffs = zeros(size(C_rgb));
                for k = 1:level
                    % 低频系数
                    len = S(1,1)*S(1,2);
                    idx = 1:len;
                    fusedCoeffs(idx) = (C_rgb(idx) + C_nir(idx)) / 2;
                    
                    % 高频系数
                    for d = 1:3 % 水平、垂直、对角
                        startIdx = len + 1;
                        len = S(k+1,1)*S(k+1,2);
                        endIdx = startIdx + len - 1;
                        
                        % 取绝对值大的系数
                        abs_rgb = abs(C_rgb(startIdx:endIdx));
                        abs_nir = abs(C_nir(startIdx:endIdx));
                        mask = abs_rgb > abs_nir;
                        fusedCoeffs(startIdx:endIdx) = ...
                            mask.*C_rgb(startIdx:endIdx) + ...
                            ~mask.*C_nir(startIdx:endIdx);
                    end
                end
                fusedRGB(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值