?? lis_scan.m
字號(hào):
function [LSP,LIP,LIS,LisFlag,Sn,N]=lis_scan(N,Sn,LSP,LIP,LIS,LisFlag)
% 函數(shù) LIS_SCAN() 檢查LIS表的各個(gè)表項(xiàng)是否重要,更新列表LIP、LSP、LIS、LisFlag和排序位流 Sn
% 輸入?yún)?shù):N —— 本級(jí)編碼閾值的指數(shù)
% Sn —— 本級(jí)編碼排序位流,為空表
% LSP —— 上一級(jí)編碼生成的重要系數(shù)列表
% LIP —— 上一級(jí)編碼生成的不重要系數(shù)列表
% LIS —— 上一級(jí)編碼生成的不重要子集列表
% LisFlag —— 上一級(jí)編碼生成的不重要子集表項(xiàng)類型列表
% 輸出參數(shù):LSP —— 本級(jí)LIS列表掃描后更新的重要系數(shù)列表
% LIP —— 經(jīng)本級(jí)LIS掃描處理后更新的不重要系數(shù)列表
% LIS —— 本級(jí)LIS列表掃描后更新的不重要子集列表
% LisFlag —— 本級(jí)LIS列表掃描后更新的不重要子集表項(xiàng)類型列表
% Sn —— 本級(jí)LIS列表掃描后更新的排序位流
% N —— 下一級(jí)編碼閾值的指數(shù)
global Mat rMat cMat
% Mat是輸入的小波分解系數(shù)矩陣,作為全局變量,在編碼的相關(guān)程序中使用
% rMat、cMat是Mat的行、列數(shù),作為全局變量,在編碼、解碼的相關(guān)程序中使用
% 讀入當(dāng)前 LIS 的表長
rlis=size(LIS,1);
% ls 是指向 LIS 當(dāng)前表項(xiàng)位置的指針,初始位置為1
ls=1;
% 由于循環(huán)過程中列表 LIS 的表長會(huì)變化,不適合用 for 循環(huán),故采用 while 循環(huán)
while ls<=rlis
% 讀入當(dāng)前 LIS 表項(xiàng)的類型
switch LisFlag(ls)
% ‘D’類表項(xiàng),包含孩子和非直系子孫
case 'D'
% 讀入該表項(xiàng)的坐標(biāo)值
rP=LIS(ls,1);
cP=LIS(ls,2);
% 生成‘D’型子孫樹
chD=coef_DOL(rP,cP,'D');
% 判斷該子孫樹是否重要
isImt=SnOut(chD,N);
if isImt
% 如果該子孫樹重要,就輸入‘1’到 Sn
Sn=[Sn,1];
% 生成該表項(xiàng)的孩子樹
chO=coef_DOL(rP,cP,'O');
% 分別判斷每個(gè)孩子的重要性
for r=1:4
% 判斷該孩子的重要性和正負(fù)符號(hào)
[isImt,Sign]=SnOut(chO(r,:),N);
if isImt
% 如果重要,就輸入‘1’和正負(fù)標(biāo)志到 Sn
Sn=[Sn,1];
if Sign
Sn=[Sn,1];
else
Sn=[Sn,0];
end
% 將該孩子添加到重要系數(shù)列表 LSP
LSP=[LSP;chO(r,:)];
else
% 如果不重要,就輸入‘0’到 Sn
Sn=[Sn,0];
% 將該孩子添加到不重要系數(shù)列表 LIP
% 本級(jí)閾值下不重要的系數(shù)在下一級(jí)編碼中可能是重要的
LIP=[LIP;chO(r,:)];
end
end
% 生成該表項(xiàng)的非直系子孫樹
chL=coef_DOL(rP,cP,'L');
if ~isempty(chL)
% 如果‘L’型樹非空,則將該表項(xiàng)添加到列表 LIS 的尾端等待掃描
LIS=[LIS;LIS(ls,:)];
% 表項(xiàng)類型更改為‘L’型
LisFlag=[LisFlag,'L'];
% 至此,該表項(xiàng)的‘D’型LIS掃描結(jié)束,在LIS中刪除該項(xiàng)及其類型符
LIS(ls,:)=[];
LisFlag(ls)=[];
else
% 如果‘L’型樹為空集
% 則該表項(xiàng)的‘D’型LIS掃描結(jié)束,在LIS中刪除該項(xiàng)及其類型符
LIS(ls,:)=[];
LisFlag(ls)=[];
end
else
% 如果該表項(xiàng)的‘D’型子孫樹不重要,就輸入‘0’到 Sn
Sn=[Sn,0];
% 將指針指向下一個(gè) LIS 表項(xiàng)
ls=ls+1;
end
% 更新當(dāng)前 LIS 的表長,轉(zhuǎn)入下一表項(xiàng)的掃描
rlis=size(LIS,1);
case 'L'
% 對(duì)‘L’類表項(xiàng),不需判斷孩子的重要性
% 讀入該表項(xiàng)的坐標(biāo)值
rP=LIS(ls,1);
cP=LIS(ls,2);
% 生成‘L’型子孫樹
chL=coef_DOL(rP,cP,'L');
% 判斷該子孫樹是否重要
isImt=SnOut(chL,N);
if isImt
% 如果該子孫樹重要,就輸入‘1’到 Sn
Sn=[Sn,1];
% 生成該表項(xiàng)的孩子樹
chO=coef_DOL(rP,cP,'O');
% 將該‘L’類表項(xiàng)從 LIS 中刪除
LIS(ls,:)=[];
LisFlag(ls)=[];
% 將表項(xiàng)的四個(gè)孩子添加到 LIS 的結(jié)尾,標(biāo)記為‘D’類表項(xiàng)
LIS=[LIS;chO(1:4,:)];
LisFlag(end+1:end+4)='D';
else
% 如果該子孫樹是不重要的,就輸入‘0’到 Sn
Sn=[Sn,0];
% 將指針指向下一個(gè) LIS 表項(xiàng)
ls=ls+1;
end
% 更新當(dāng)前 LIS 的表長,轉(zhuǎn)入下一表項(xiàng)的掃描
rlis=size(LIS,1);
end
end
% 對(duì) LIS 的掃描結(jié)束,將本級(jí)閾值的指數(shù)減1,準(zhǔn)備進(jìn)入下一級(jí)編碼
N=N-1;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -