【图像融合】基于DCT域实现多焦点图像融合含Matlab源码

1 内容介绍

在诸如无线视觉传感器网络(wireless visual sensor networks, WVSN)中,多个空间位置相邻的传感摄像头监测同一场景时将获得多幅图像或多个视频序列,但这些图像和视频数据往往存在大量重叠和冗余. 另外,由于传感摄像头聚焦的范围有限,通常难以使场景中所有对象均清晰地成像. 因此,将多个传感摄像头拍摄的图像/视频进行数据融合,不仅能够产生清晰的图像/视频,而且能够消除数据之间的冗余,提高信息的利用率,为图像/视频数据后期处理奠定基础. 这种被称为多聚焦图像融合技术[1-5]已在医学成像、目标识别、卫星遥感、气象预测和交通等领域获得应用.

目前,绝大部分图像和视频内容经过 JPEG、MPEG-X 和 H.26L 等图像和视频压缩标准进行编码后,以码流的形式进行存储和传输. 这些图像和视频编码标准主要采用离散余弦变换(discrete cosine transform, DCT)技术,在 DCT 域进行量化和编码操作. 如果采用非 DCT域的融合算法对压缩图像进行融合处理,必然涉及图像的解码、融合以及再编码 3 个过程,计算复杂度较高,消耗和占用终端的资源较多. 之前大部分多聚焦图像融合算法主要集中在像素域[1-2]、小波域[3]、剪切波域[4]以及轮廓波域[5],它们难以在实时要求较高的场合以及资源受限的无线终端上应用. 为了解决上述问题,文献 [6-9] 考虑在 DCT 域上实现图像融合,其过程不需要进行图像的完全解码和再编码,不仅能大大降低处理的复杂度,减少终端资源的消耗,而且可以借助 DCT 域的特性获得更好的融合效果.

现有的基于 DCT 域的多聚焦图像融合算法可粗略地分为两类:基于系数的融合[7]以及基于块的融合[6,8-9]. 第 1 类融合算法选择 DCT 系数作为图像的融合单位,其典型的工作主要有:文献 [7] 提出了一种 DCT 域多聚焦图像融合算法,选择局部对比度较大的 DCT 系数作为融合图像的系数. 与基于像素域和小波域的传统算法相比,该算法能大大降低计算复杂度,但融合图像容易出现对比度下降及伪影的情况. 第2类融合算法则以 8×8 DCT 块作为图像融

合的单位,其典型的工作有:文献 [6] 选择具有多数高频系数的 DCT 块进行融合,但在选择DCT 块时容易出现误判,继而导致块效应的出现. 文献 [8] 考虑到图像的清晰区域具有较多的细节和较大的方差值,提出了一种基于 DCT 域方差的融合算法. 该算法以 8×8 DCT 块为单位,计算待融合源图像的方差,并选择方差较大的块作为融合图像的 DCT 块,但融合图像容易出现块效应. 文献 [9] 提出了一种基于空间频率的图像融合算法,能获得较好的客观融合指标,但因该算法以 DCT 块为单位进行图像融合,一旦出现误判就容易出现块效应,影响融合图像的主观质量.

现有的基于离散余弦变换(discrete cosine transform,DCT)的多聚焦图像融合算法容易使融合图像出现块效应和伪影,为此提出一种基于DCT域纹理特征的图像融合算法.该算法以8×8 DCT块中反映能量方向性的纹理区域作为图像融合单位,根据纹理区域的频谱相似度,选择能量较大的区域或以区域加权叠加的方式获得融合区域.实验结果表明,与现有基于DCT域的多聚焦图像融合算法相比,该算法获得的融合图像主观质量较好,能有效避免明显的块效应与伪影.

2 仿真代码

clcclearclose all%Select First Imagedisp('Please Select First Image:')[filename, pathname]= uigetfile({'*.jpg;*.png;*.tif'},'Select First Image');path=fullfile(pathname, filename);im1=imread(path);disp('Great! First Image is selected')%Select Second Imagedisp('Please Select Second Image:')[filename, pathname]= uigetfile({'*.jpg;*.png;*.tif'},'Select Second Image');path=fullfile(pathname, filename);im2=imread(path);disp('Great! Second Image is selected')if size(im1,3) == 3     % Check if the images are grayscale    im1 = rgb2gray(im1);endif size(im2,3) == 3    im2 = rgb2gray(im2);endif size(im1) ~= size(im2)  % Check if the input images are of the same size    error('Size of the source images must be the same!')enddisp('congratulations! Fusion Process in Running')% Get input image size[m,n] = size(im1);FusedDCT = zeros(m,n);FusedDCT_CV = zeros(m,n);Map = zeros(floor(m/8),floor(n/8));  % Level shiftingim1 = double(im1)-128;im2 = double(im2)-128;x=-1;y=-4;z=20;C=dctmtx(8);t=[     y     x     0     0     0     0     0     0     x     y     x     0     0     0     0     0     0     x     y     x     0     0     0     0     0     0     x     y     x     0     0     0     0     0     0     x     y     x     0     0     0     0     0     0     x     y     x     0     0     0     0     0     0     x     y     x     0     0     0     0     0     0     x     y]; s=[     z     y     0     0     0     0     0     0     y     z     y     0     0     0     0     0     0     y     z     y     0     0     0     0     0     0     y     z     y     0     0     0     0     0     0     y     z     y     0     0     0     0     0     0     y     z     y     0     0     0     0     0     0     y     z     y     0     0     0     0     0     0     y     z]; u=[     x+2*y     0     0     0     0     0     0     0     0         0     0     0     0     0     0     0     0         0     0     0     0     0     0     0     0         0     0     0     0     0     0     0     0         0     0     0     0     0     0     0     0         0     0     0     0     0     0     0     0         0     0     0     0     0     0     0     0         0     0     0     0     0     0     x+2*y ]; sistency verification index        end        if z<zz            dctBlock = im2_Block_DCT;            Map(i,j) = +1;    % Consistency verification index        end        if z<zz+threshold1 && z>zz-threshold1            dctBlock = (im2_Block_DCT+im2_Block_DCT)./2;            Map(i,j) =0 ;        end                % Compute the 2-D inverse DCT of 8*8 blocks and construct fused image        FusedDCT(8*i-7:8*i,8*j-7:8*j) = C'*dctBlock*C;  % DCT+VOL method           endendtoc% Concistency verification (CV) with Majority Filter (3x3 Averaging Filter)fi=fspecial('average',3);Map_Filtered = imfilter(Map, fi,'symmetric');  % Filtered index mapthreshold2=0.00;for i = 1:m/8    for j = 1:n/8        % DCT+Variance+CV method        if Map_Filtered(i,j) <= -threshold2            FusedDCT_CV(8*i-7:8*i,8*j-7:8*j) = im1(8*i-7:8*i,8*j-7:8*j);           end        if Map_Filtered(i,j) > threshold2            FusedDCT_CV(8*i-7:8*i,8*j-7:8*j) = im2(8*i-7:8*i,8*j-7:8*j);              end        if Map_Filtered(i,j) > -threshold2 &&  Map_Filtered(i,j) < threshold2             FusedDCT_CV(8*i-7:8*i,8*j-7:8*j) = (im1(8*i-7:8*i,8*j-7:8*j)+im2(8*i-7:8*i,8*j-7:8*j))./2;        end        endend% Inverse level shifting im1 = uint8(double(im1)+128);im2 = uint8(double(im2)+128);FusedDCT = uint8(double(FusedDCT)+128);FusedDCT_CV = uint8(double(FusedDCT_CV)+128);% Show Images Tablesubplot(2,2,1), imshow(im1), title('Source image 1');subplot(2,2,2), imshow(im2), title('Source image 2');subplot(2,2,3), imshow(FusedDCT), title('"DCT+VOL" fusion result');subplot(2,2,4), imshow(FusedDCT_CV), title('"DCT+VOL+CV" fusion result');% Good Luck% Mostafa Amin-Naji ;)

3 运行结果

4 参考文献

[1] Li S, Yang B. Multifocus image fusion using region segmentation and spatial frequency [J].

Image and Vision Computing, 2008, 26(7): 971-979.

[2] Li X J, Wang M H. Research of multi-focus image fusion algorithm based on Gabor filter bank

[C]//Proceedings of 12th International Conference on Signal Processing, 2014: 693-697.

[3] Tian J, Chen L. Multi-focus image fusion using wavelet-domain statistics [C]//Proceedings of

17th IEEE International Conference on Image Processing, 2010: 1205-1208.

[4] Gao G R, Xu L P, Feng D Z. Multi-focus image fusion based on non-subsampled shearlet

transform [J]. IET Image Processing, 2013, 7(6): 633-639.

[5] Yang Y, Tong S, Huang S Y, Lin P. Multifocus image fusion based on NSCT and focused

area detection [J]. IEEE Sensors Journal, 2015, 15(5): 2824-2838.

[6] Phamila Y A V, Amutha R. Discrete cosine transform based fusion of multi-focus images for

visual sensor networks [J]. Signal Process, 1995, 95: 161-170.

[7] Tang J. A contrast based image fusion technique in the DCT domain [J]. Digit Signal Process,

2004, 14(3): 218-226.

[8] Haghighat M B A, Aghagolzadeh A, Seyedarabi H. Multi-focus image fusion for visual

sensor networks in DCT domain [J]. Computers and Electrical Engineering, 2011, 37(5): 789-797.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

 

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值