1 内容介绍
遥感影像数据量大,需要在星载设备上通过低复杂度算法进行压缩。具有自适应扫描顺序的二叉树编码(BTCA)是一种有效的任务算法。但是,对于大规模的遥感影像,BTCA 需要大量的内存,并且不提供随机访问特性。在本文中,我们提出了一种基于 BTCA 的新编码方法并优化截断。小波图像首先被分成几个块,分别由 BTCA 编码。根据 BTCA 的性质,我们选择有效的截断点对每个块仔细优化率失真比,从而获得更高的压缩比,更低的内存需求和随机访问特性。该方法无需任何熵编码,简单快速,非常适用于星载设备。在三个遥感图像集上进行了实验,结果表明它可以显着提高PSNR 、SSIM和VIF,以及主观视觉体验。
2 仿真代码
%% matlab code for BTOT(Binary Tree and Optimized Truncation)
%
clc;clear;
%% ----------- Input ----------------
imname = 'SanDiego.bmp';
I_Orig = double(imread(imname));
[row, col] = size(I_Orig);
blksize = 64;
%% ----------- Wavelet Decomposition -------------
n_log = log2(row);
level = floor(n_log);
I_Dec = wavecdf97(I_Orig, level);
n_min = 1;
brates = [0.0625, 0.125, 0.25, 0.5, 1];
%% ----------- Coding ----------------
[out_code, blklen, n_max, n_min, out_S,out_R,out_N] = encode(I_Dec, blksize, n_min);
%% ----------- Decoding ----------------
disp([ 'aa_BTOT_' imname(1:end-4) '=[']);
for rate=brates
I_DecR = decode(out_code, blklen, n_max, n_min, blksize, row, rate, out_S,out_R,out_N);
I_Rec = wavecdf97(I_DecR, -level);
MSE = sum(sum((I_Rec - I_Orig).^2))/(row*row);
PSNR = 10*log10(255*255/MSE);
disp([sprintf('%.4f',rate) ' ' sprintf('%.2f',PSNR)]);
end
disp('];');
figure
subplot(211)
imshow(I_Orig,[])
title('原图')
subplot(212)
imshow( I_Rec,[] )
title('压缩图')