close all clear clc %% Read Images % the size of images must be equal a=imread('IR1.png'); b=imread('VIS1.png'); %% Wavelet Transform [a1,b1,c1,d1]=dwt2(a,'db2'); [a2,b2,c2,d2]=dwt2(b,'db2'); [k1,k2]=size(a1); %% Fusion Rules %% Average Rule for i=1:k1 for j=1:k2 a3(i,j)=(a1(i,j)+a2(i,j))/2; end end %% Max Rule for i=1:k1 for j=1:k2 b3(i,j)=max(b1(i,j),b2(i,j)); c3(i,j)=max(c1(i,j),c2(i,j)); d3(i,j)=max(d1(i,j),d2(i,j)); end end %% Inverse Wavelet Transform c=idwt2(a3,b3,c3,d3,'db2'); imshow(a) title('First Image') figure,imshow(b) title('Second Image') figure,imshow(c,[]) title('Fused Image') fusedimage=(c-min(c(:)))/(max(c(:))-min(c(:)))*255; fusedimage1=uint8(fusedimage); imwrite(fusedimage1,'fusedimage.bmp')并进行公式上的展示
时间: 2024-04-28 10:26:19 浏览: 107
这段代码实现了两张图像的小波融合,其融合规则使用了平均规则和最大规则。
小波变换的公式为:
$$
\begin{aligned}
a &= LL + LH + HL + HH \\
a_1 &= LL \\
b_1 &= LH \\
c_1 &= HL \\
d_1 &= HH
\end{aligned}
$$
其中,$a$为原始图像,$a_1$、$b_1$、$c_1$、$d_1$为小波变换后得到的四个系数矩阵。
逆小波变换的公式为:
$$
\begin{aligned}
a &= LL + LH + HL + HH \\
a_1 &= LL \\
b_1 &= LH \\
c_1 &= HL \\
d_1 &= HH
\end{aligned}
$$
其中,$a$为逆小波变换后得到的融合图像,$a_1$、$b_1$、$c_1$、$d_1$为融合前的四个系数矩阵。
平均规则的公式为:
$$
a_3(i,j) = \frac{a_1(i,j)+a_2(i,j)}{2}
$$
最大规则的公式为:
$$
\begin{aligned}
b_3(i,j) &= \max(b_1(i,j),b_2(i,j)) \\
c_3(i,j) &= \max(c_1(i,j),c_2(i,j)) \\
d_3(i,j) &= \max(d_1(i,j),d_2(i,j))
\end{aligned}
$$
最后将融合后的图像进行归一化处理,得到$fusedimage$矩阵,再将其转换为$uint8$类型,最后保存为$fusedimage.bmp$文件。
相关问题
对这段代码进行解析close all clear clc %% Read Images % the size of images must be equal a=imread('IR1.png'); b=imread('VIS1.png'); %% Wavelet Transform [a1,b1,c1,d1]=dwt2(a,'db2'); [a2,b2,c2,d2]=dwt2(b,'db2'); [k1,k2]=size(a1); %% Fusion Rules %% Average Rule for i=1:k1 for j=1:k2 a3(i,j)=(a1(i,j)+a2(i,j))/2; end end %% Max Rule for i=1:k1 for j=1:k2 b3(i,j)=max(b1(i,j),b2(i,j)); c3(i,j)=max(c1(i,j),c2(i,j)); d3(i,j)=max(d1(i,j),d2(i,j)); end end %% Inverse Wavelet Transform c=idwt2(a3,b3,c3,d3,'db2'); imshow(a) title('First Image') figure,imshow(b) title('Second Image') figure,imshow(c,[]) title('Fused Image') fusedimage=(c-min(c(:)))/(max(c(:))-min(c(:)))*255; fusedimage1=uint8(fusedimage); imwrite(fusedimage1,'fusedimage.bmp')
这段代码实现了两张图像的融合,具体步骤如下:
1. 读取两张图像,要求它们的大小相等。
2. 对两张图像进行小波变换,得到四个系数矩阵:a1、b1、c1、d1和a2、b2、c2、d2。
3. 采用平均规则对a1和a2进行融合,得到a3矩阵。
4. 采用最大规则对b1、b2、c1、c2、d1、d2进行融合,得到b3、c3、d3矩阵。
5. 对a3、b3、c3、d3进行逆小波变换,得到融合后的图像c。
6. 显示原始图像a、b和融合后的图像c,并将融合后的图像c保存为fusedimage.bmp。
需要注意的是,这段代码使用了db2小波基函数进行小波变换和逆小波变换,采用了平均规则和最大规则进行融合,其中最大规则是针对b1、b2、c1、c2、d1、d2矩阵的,而不是对a1和a2矩阵。
对下面代码解释close all clear all clc path1='.\Results_real\'; % path of the testing results imgDir1 = dir([path1 '*.mat']); % get dir of the results n=length(imgDir1); % get size of the testing data for j = 1:n load([path1 imgDir1(j).name]); % read th
代码中的`close all`、`clear all`和`clc`是MATLAB中的命令。
- `close all`关闭当前打开的所有图形窗口。这可以帮助释放内存并清除屏幕上的图形。
- `clear all`清除工作区中的所有变量。这将删除当前工作区中的所有变量,以便您可以从头开始运行代码。
- `clc`清除命令窗口的内容。这将清除命令窗口中的所有文本,以便您可以开始一个新的操作。
接下来的代码片段是用于获取指定文件夹中的.mat文件,并对其进行加载和处理。`path1`变量指定了.mat文件所在的文件夹路径,`imgDir1`使用`dir`函数获取了该文件夹中所有以.mat为后缀的文件的信息。然后,通过循环遍历每个文件,并使用`load`函数加载文件内容。这段代码的目的是读取.mat文件并进行后续操作。
阅读全文