1 简介
四叉树分解算法将待分解的源图像 A 和源图像 B 定义为一对图像块组,若源图像块组中图像数量较多,则称之为图像块序列,最先进行分解的图像块组( 源图像) 称为四叉树的根节点,由根节点开始对图像块进行分解,每次分解为 4 个叶子节点,以此类推,直至分解条件结束。对每一次分解结果进行聚焦度测算,若符合 RPCA 判定条件阈值,则本节点停止分解,其余叶子节点继续分解,下面详细阐述本算法流程:首先,假定两种情况作为图像块分解的基础实施条件,
情况 1: 被分解出的块为全聚焦块。
情况 2:被分解出的块含有聚焦部分和非聚焦部分。其次将含有 m( m ≥ 2) 幅源图像的图像序列输入四叉树结果的根节点,对于根节点块序列,若其在 RPCA 检测中符合情况 1,则本块不需要继续分解,否则符合情况 2,需要进行第二级的四叉树分解,持续进行本过程,直到所有的聚焦区域被找出,或者已持续进行至四叉树的分解的最大级数。本文最终将源图像分解为 2 × 2 大小的图像块,其对应的分解级为最大分解级( max level) ,最大分解级的计算方式如下式所示:
其中 M × N 为源图像尺寸,lg 为对数运算符。
在进行四叉树分解前,输入至根节点的源图像需要进行正方形映射处理,以便分解至最终形态。假设源图像作为四叉树分解的第一级,最终分解的图像块大小为 2 × 2,那么图像的分解层数应该为log{ max( M - 1,N - 1) } + 1 的整数部分,当分解进行至最大级数时,可以认为这种情况下的聚焦度探测到达了最精确的情况,本文所使用的源图像块大小为 512×512。
2 部分代码
% -------------------------------------------------------------------------% Clear history and memory
clc; clear; close all;
%--------------------- Configurating the parameters -----------------------
% Initialise the maximum split level
level = 0;
% image set name string, default: 'clock'. All image sets:
% clock'|'lab'|'pepsi'|'OpenGL'|'flower'|'disk'|'toy'
name = 'clock';
% Set the image type.
type = '.bmp';
% Set the image number: the number of images in image set toy is 3,
% and the image number of the other sets is 2.
num = 2;
%--------------------- Quadtree based image fusion -----------------------
[fimg, decision_map] = Quadtree_Fusion(name, type, num, level);
%------------------------- Show the fusion image -------------------------
subplot(133);imshow(fimg);title('融合后的图')
3 仿真结果
4 参考文献
Xiangzhi Bai, Yu Zhang, Fugen Zhou, and Bindang Xue. Quadtree-based multi-focus image fusion using a weighted focus-measure[J]. Information Fusion, 2015, 22: 105-118.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。