欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【MATLAB图像融合】像素极大/小值选择及函数的调用[3]

程序员文章站 2022-07-14 16:50:00
...

像素极大/小值选择

原理
       同上一篇文章一样,原理都是对像素进行操作。稍有不同的是,这次的策略是替换,而不是配权。首先读入两张图像,遍历所有的像素值;比较像素值的大小,选择大的或小的一方存入第三个矩阵当中;对所有像素都比较过后,生成的新矩阵就是我们所需要的融合图像了。
MATLAB实现

文件1,“主函数”。

clear;clc;

x1=imread('gcoffe1.tif');
x2=imread('gcoffe2.tif');
    
w=fmaxmin(x1,x2);                    %调用fmaxmin函数文件,传递参数x1,x2

subplot 221;imshow(x1);title('图像1');
subplot 222;imshow(x2);title('图像2');
subplot 223;imshow(uint8(w{1}));title('基于像素值选大的融合图像');
subplot 224;imshow(uint8(w{2}));title('基于像素值选小的融合图像');

文件2,“功能函数”。

function w=fmaxmin(x1,x2)
    x1=double(x1);
    x2=double(x2);
    [m,n]=size(x1);
    
    for i=1:m                   %基于像素值选大的简单图像融合方法
        for j=1:n
            if x1(i,j)>=x2(i,j)               
               y1(i,j)=x1(i,j);
            else
               y1(i,j)=x2(i,j);
            end
        end
    end
%------------------------------------------------------------------%
    for i=1:m                    %基于像素值选小的简单图像融合方法
        for j=1:n
            if x1(i,j)<x2(i,j)               
               y2(i,j)=x1(i,j);
            else
               y2(i,j)=x2(i,j);
            end
        end
    end
    w={y1,y2};                   %元胞数组(超级数组),存放两个矩阵。
end

运行结果:
【MATLAB图像融合】像素极大/小值选择及函数的调用[3]
注意事项
1、编写的功能函数文件名和函数名要保持一致。
2、编写不同的函数文件方便在其他程序中使用,所以功能确定且代码量较大的函数可以考虑新建函数文件;反之一次性的函数可以使用内联函数。
3、关于{}、[]、()的使用区别非常重要~很容易犯晕。

       前三篇文章都是入门使用,建立图像融合和MATLAB的一些基本概念;若要实现好的图像融合方法,需要学习一些基础的图像处理方法。我目前的路线是:基础图像处理(插值、卷积、采样等)→ 变换域 → 拉普拉斯分解 → 小波分解 → 空间域 → HIS变换 → 主成分分析 → … …。在后面的文章中,我还是尽量使用MATLAB去实现,方法、代码等或许会出现许多问题。欢迎评论留言、指正~