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

【MATLAB图像融合】第一个图像融合实例[1]

程序员文章站 2022-07-14 16:49:54
...

像素的加法融合

原理
       对于一张数字图像,它在计算机中的存储是这样的:【MATLAB图像融合】第一个图像融合实例[1]
       我们可以将这个存储当做一个二维的矩阵、进一步地,视为二维数组来进行处理。可以想到:如果我们的目的是完成对两张图片的融合,最简单的方法就是把每一个像素点加起来。于是利用imadd函数,我们可以实现这个操作:

MATLAB实现

clear;clc;               %例行公事,清除所有存储的变量,清除命令行。
I1=imread('coffe1.tif'); %I1为变量,imread函数可以读入图片。
subplot(2,2,1)           %subplot用于制作子图像。
imshow(I1)               %imshow函数可以显示图像,()内为变量名。
title('原图像1')         %title函数可以给图片加标题。

I2=imread('coffe2.tif'); 
subplot(2,2,2)   
imshow(I2)  
title('原图像2')     

K=imadd(I1,I2,'uint8'); %imadd函数是将每一个像素值相加然后输出新的矩阵。      
subplot(2,2,3)
imshow(K);
title('融合图像')

       如果是第一次接触matlab,可以先看一些入门简介视频,这种语言非常容易使用。以上代码有几个地方解释一下:①、分号的使用:MATLAB中分号可以避免结果的输出,一条语句执行后会有一个返回值,如果不想显示这个返回值,就在语句后面加上分号,避免程序执行的时候运行窗口出现很多不需要的值得显示。②、subplot函数还可以这样用:subplot 231,代表一个2*3的图像阵中的第1个子图。③、遇到不会的函数在命令行中输入help 函数名,就可以得到功能和调用方法了。
运行结果:【MATLAB图像融合】第一个图像融合实例[1]
       可以看到,出现了融合图像,但是明显亮度过高–这是因为imadd函数简单地将两幅图像的像素值相加(这个像素的数值其实代表灰度等级),所以两人份的灰度加起来,自然就太亮了,那么可以这样解决:

clear;clc;               %例行公事,清除所有存储的变量,清除命令行。

I1=imread('coffe1.tif'); %I1为变量,imread函数可以读入图片。
I1_=I1./2;               %%%%%将I1的像素值减半。%%%%%%
subplot 221              %subplot用于制作子图像。
imshow(I1)               %imshow函数可以显示图像,()内为变量名。
title('原图像1')          %title函数可以给图片加标题。

I2=imread('coffe2.tif'); 
I2_=I2./2;
subplot 222   			 %subplot的第二种使用方式
imshow(I2)  
title('原图像2')     

K=imadd(I1_,I2_,'uint8');%imadd函数是将每一个像素值相加然后输出新的矩阵。      
subplot 223
imshow(K);
title('融合图像')

运行结果:
【MATLAB图像融合】第一个图像融合实例[1]       图像的亮度显示正常了。这里是将I1,I2两张图像的像素值首先减半,然后再进行imadd操作,就得到正常融合图像了。

clear;clc;   

I1=imread('coffe1.tif'); 
I2=imread('coffe2.tif'); 
I1_=I1./2;
I2_=I2./2;

K=I1_+I2_;

subplot 221;imshow(I1);title('原图像1')
subplot 222;imshow(I2);title('原图像2')
subplot 223;imshow(K);title('融合图像')

       使用以上代码会更为精简,方法和结果都是相同的。在后面的方法中,使用了./这个运算,它的作用是对矩阵中的每一个元素进行除法运算;+是对两个矩阵中的每个元素进行加法运算。

总结
       以上就是第一个图像融合的实例。在此基础上,接下来进行图像的像素加权融合和像素极大值融合。有问题欢迎评论或私信交流。