function output = LSK_main_encode_chen(x, max_bits, block_size, level)
% Matlab implementation of SPECK
%
% Encoder
%
% input: x : input image in wavelet domain
% max_bits : maximum bits can be used
% block_size : image size
% level : wavelet decomposition level
%
% output: out : bit stream
%
% Initially read image and scan it in MORTON's scan order and use Linear Indexing
%function [] = encode256()
% The pointers used are
% MS2 - 1, MS4 - 2, MS8 - 3, MS16 - 4, MS32 - 5, MS64 - 6, MS128 - 7, MS256 - 8
% MIP - 0, MSP - 15, MNP - 14, NULL - 13
% Initially read image and scan it in MORTON's scan order and use Linear Indexing
% clear all,clc
clear global
clear mark
global mark
mark(1:block_size*block_size)=13; % Initialize to NULL, Here zero is not considered
map=mapping(block_size);
seqt(map) = x;
% Start Initialization
mn=0;
var=[];
mark = mark_gen(block_size,level);
% for ii=1:64
% mark(ii)=0; % MIP
% end
%
% mark(65)=3;mark(129)=3;mark(193)=3;
% mark(257)=4;mark(513)=4;mark(769)=4;
% mark(1025)=5;mark(2049)=5;mark(3073)=5;
% mark(4097)=6;mark(8193)=6;mark(12289)=6;%%%%%%%128*128
% mark(16385) = 7; mark(32769) = 7; mark(49153) = 7;%%256*256
%-----------------------------------------------------------
seqt = double(seqt);
n=fix(log2(max(abs(seqt))));
% disp('The figure of n is ');disp(n);
n1=n;
output=[];
temp = dec2bin(block_size, 16);output = [ output temp ];
temp = dec2bin(n,8);output = [ output temp ];
temp = dec2bin(level,8); output = [ output temp ];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1 : 16 bits for image block size
% 2 : 8 bits for n
% 3 : 8 bits for level
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bitcnt = 32; cnt_flag = 0;
while n >= 0 %%bitcnt < max_bits
ii=1;
while ii<=block_size*block_size
if mark(ii)==0 % i.e., if MIP
bitcnt = bitcnt + 1;
if bitcnt > max_bits
cnt_flag = 1;
break;
end;
if 2^n<=abs(seqt(ii)) & abs(seqt(ii))<2^(n+1)
output=[output '1'];mn=mn+1;var=[var seqt(ii)];
mark(ii)=14; % Mark MNP, Newly significant
bitcnt = bitcnt + 1;
if bitcnt > max_bits
cnt_flag = 1;
break;
end;
if seqt(ii)<0
output=[output '1']; % -ve
else
output=[output '0']; % +ve
end
else
output=[output '0'];
end
ii=ii+1;
elseif mark(ii)>0 & mark(ii)<9
% O/p significance of Marker
arr=seqt(ii:ii+2^(2*mark(ii))-1); % Check for block significance
arr=sum([2^n<=abs(arr) & abs(arr)<2^(n+1)]);
bitcnt = bitcnt + 1;
if bitcnt > max_bits
cnt_flag = 1;
break;
end;
if arr==0
output=[output '0'];
ii=ii+2^(2*mark(ii));
else
output=[output '1'];
partition(ii);
end
arr=0;
else
ii=ii+1;
end
end
% REFINEMENT PASS
ii=1;
while ii<=block_size*block_size
if mark(ii)==15
a=dec2bin(abs(seqt(ii)),n1+1);
bitcnt = bitcnt + 1;
if bitcnt > max_bits
cnt_flag = 1;
break;
end;
output=[output a(n1-n+1)];
ii=ii+1;
elseif mark(ii)==14
mark(ii)=15;
ii=ii+1;
else
ii=ii+2^(2*mark(ii));
end
end
% GOTO STEP 2
if cnt_flag == 1
break;bitcnt
end;
n=n-1;
%disp('n is');disp(n);
end
[ mn length(find(abs(seqt)>=2^(n+1))) length(find(mark==15))]
disp('length of output is');disp(size(output,2));
save filename output
disp(' D O N E ')
LSK.rar_lsk
版权申诉
64 浏览量
2022-09-24
12:49:26
上传
评论
收藏 1.12MB RAR 举报
weixin_42653672
- 粉丝: 93
- 资源: 1万+
最新资源
- 基于Java和Javascript的音乐悬浮歌词设计源码 - musicLrc
- ripgrep tools
- kubesphere离线安装v3.3的centos7iso资源
- xx 文库下载神器,目前亲测试pdf 有效
- kubesphere离线安装v3.3的v3.0.7的kk资源
- kubesphere离线安装v3.3的ubuntu2020iso资源
- 一个简单的Python脚本,它包含了将点分十进制IP地址转换为32位整数(通常称为IPv4地址的整数表示)和进行简单的IP地址校
- scratch2源码星球大战
- Java springboot 创建springboot项目基础框架
- 成绩管理系统后台20240529135001
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈