发明名称 一种卫星图像压缩方法及其实现装置
摘要 一种卫星图像压缩方法及其实现装置,属于遥感和数字图像处理领域,解决现有图像压缩方法对编码数据传输误码率要求高、处理速度慢的问题。本发明方法,将整幅图像分为子图像,子图像独立编码,顺序进行初始化、像素冗余去除、上下文提取、预测、Golomb编码和数据聚合步骤;在进行预测和Golomb编码步骤的同时,并行顺序进行梯度计算和上下文环境参数更新步骤。本发明装置采用FPGA实现,包括坐标计算、分块控制、像素冗余去除、上下文提取、预测、Golomb编码、数据聚合、梯度计算和上下文环境参数模块。本发明提高图像压缩率,误码容忍能力强,实时性好,整体编码效率极大提升,能满足大幅面卫星图像数据实时无损压缩的要求。
申请公布号 CN101771874B 申请公布日期 2011.09.14
申请号 CN200910273497.3 申请日期 2009.12.31
申请人 华中科技大学 发明人 张天序;颜露新;钟胜;龚程;王泽;李柯;郭畅;孙建华;胡静
分类号 H04N7/26(2006.01)I;H04N7/32(2006.01)I;H04N7/66(2006.01)I 主分类号 H04N7/26(2006.01)I
代理机构 华中科技大学专利中心 42201 代理人 方放
主权项 1.一种卫星图像压缩方法,其特征在于:将整幅图像按行分为1~10240块子图像,对每块子图像独立编码,顺序进行初始化步骤、像素冗余去除步骤、上下文提取步骤、预测步骤、Golomb编码步骤和数据聚合步骤;在进行预测步骤和Golomb编码步骤的同时,并行顺序进行梯度计算步骤和上下文环境参数更新步骤;(1)初始化步骤:将数组A[]内的每一个值初始化为max(2,<img file="FDA0000065529160000011.GIF" wi="259" he="124" />),数组B[]内的每一个值初始化为0,数组C[]内的每一个值初始化为0,数组N[]内的每一个值初始化为1;M为当前图像像素比特位位宽可表示的最大值;数组A[]、B[]、C[]和N[]为四个存储器;数组A[]存储对应上下文参数索引值的已编码像素累积的预测误差绝对值之和,数组B[]存储对应上下文参数索引值的已编码像素的预测误差值之和,数组C[]存储对应上下文参数索引值的编码像素灰度值的修正值,数组N[]存储对应上下文参数索引值的已编码像素的个数;(2)像素冗余去除步骤:检测输入卫星图像的像素灰度值比特位,当像素灰度值比特位高n位为全0或者低n位为全0时,去除高n位或者低n位;(3)上下文提取步骤:从卫星图像的第一个像素开始,按行顺序提取卫星图像当前像素(i,j)的上下文像素灰度值f(i,j-1)、f(i-1,j-1)、f(i-1,j)、f(i-1,j+1);其中f(i,j)为图像像素(i,j)的灰度值函数,i为像素所在的行,j为像素所在的列,1≤i≤R,1≤j≤C,R为图像的行数,C为图像的列数,图像大小为R×C,R、C的大小根据需要设定;当i=1、j=1或j=C的边缘情况下,上下文像素灰度值如下取值:(3-1)i=1时,f(i-1,j-1)=0;f(i-1,j)=0;f(i-1,j+1)=0;(3-2)j=1时,f(i,j-1)=f(i-1,j);(3-3)j=C时,f(i-1,j+1)=f(i-1,j);(4)预测步骤,顺序包括:(4-1)固定预测子步骤:基于当前像素的上下文像素灰度值预测当前像素灰度值,得到当前像素灰度预测值P:<img file="FDA0000065529160000021.GIF" wi="1612" he="213" />其中,<maths num="0001"><![CDATA[<math><mrow><mi>max</mi><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>x</mi><mo>,</mo></mtd><mtd><mi>x</mi><mo>&GreaterEqual;</mo><mi>y</mi></mtd></mtr><mtr><mtd><mi>y</mi><mo>,</mo></mtd><mtd><mi>x</mi><mo>&lt;</mo><mi>y</mi></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths><maths num="0002"><![CDATA[<math><mrow><mi>min</mi><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>y</mi><mo>,</mo></mtd><mtd><mi>x</mi><mo>&GreaterEqual;</mo><mi>y</mi></mtd></mtr><mtr><mtd><mi>x</mi><mo>,</mo></mtd><mtd><mi>x</mi><mo>&lt;</mo><mi>y</mi></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>(4-2)自适应修正子步骤:对当前像素灰度预测值P进行修正,得到当前像素预测修正值P<sub>C</sub>:<maths num="0003"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><mi>Pc</mi><mo>=</mo><mi>P</mi><mo>+</mo><mi>C</mi><mo>[</mo><mi>q</mi><mo>]</mo></mtd><mtd><mi>s</mi><mo>=</mo><mn>1</mn></mtd></mtr><mtr><mtd><mi>Pc</mi><mo>=</mo><mi>P</mi><mo>-</mo><mi>C</mi><mo>[</mo><mi>q</mi><mo>]</mo></mtd><mtd><mi>s</mi><mo>=</mo><mo>-</mo><mn>1</mn></mtd></mtr><mtr><mtd><mi>Pc</mi><mo>=</mo><mi>M</mi></mtd><mtd><mi>Pc</mi><mo>></mo><mi>M</mi></mtd></mtr><mtr><mtd><mi>Pc</mi><mo>=</mo><mn>0</mn></mtd><mtd><mi>Pc</mi><mo>&lt;</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths>式中,M为当前图像像素灰度值比特位位宽可表示的最大值,q为上下文参数索引值,s为符号位,q和s由梯度计算步骤(7)给出,C[q]为上下文参数索引值q在数组C[]中的对应值,由数组C[]的存储器中读出;(4-3)误差预测子步骤:由当前像素灰度值f(i,j)与其预测修正值P<sub>C</sub>得到预测残差值e<sub>x</sub>:<maths num="0004"><![CDATA[<math><mrow><msub><mi>e</mi><mi>x</mi></msub><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>f</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>-</mo><mi>Pc</mi></mtd><mtd><mi>s</mi><mo>=</mo><mn>1</mn></mtd></mtr><mtr><mtd><mi>Pc</mi><mo>-</mo><mi>f</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow></mtd><mtd><mi>s</mi><mo>=</mo><mo>-</mo><mn>1</mn></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>(4-4)误差映射子步骤:对预测残差值e<sub>x</sub>进行取模处理,得到预测残差模值e<sub>x</sub>′:<maths num="0005"><![CDATA[<math><mrow><msup><msub><mi>e</mi><mi>x</mi></msub><mo>&prime;</mo></msup><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>e</mi><mi>x</mi></msub><mo>+</mo><mi>M</mi><mo>+</mo><mn>1</mn></mtd><mtd><msub><mi>e</mi><mi>x</mi></msub><mo>&lt;</mo><mo>-</mo><mfrac><mrow><mi>M</mi><mo>+</mo><mn>1</mn></mrow><mn>2</mn></mfrac></mtd></mtr><mtr><mtd><msub><mi>e</mi><mi>x</mi></msub><mo>-</mo><mi>M</mi><mo>-</mo><mn>1</mn></mtd><mtd><msub><mi>e</mi><mi>x</mi></msub><mo>&GreaterEqual;</mo><mfrac><mrow><mi>M</mi><mo>+</mo><mn>1</mn></mrow><mn>2</mn></mfrac></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>式中,M为当前图像像素比特位位宽可表示的最大值;(5)Golomb编码步骤,进行Golomb编码,顺序包括:(5-1)映射处理子步骤:将预测残差模值e<sub>x</sub>′映射为非负值E:<maths num="0006"><![CDATA[<math><mrow><mi>E</mi><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>2</mn><msup><msub><mi>e</mi><mi>x</mi></msub><mo>&prime;</mo></msup></mtd><mtd><msup><msub><mi>e</mi><mi>x</mi></msub><mo>&prime;</mo></msup><mo>&GreaterEqual;</mo><mn>0</mn></mtd></mtr><mtr><mtd><mn>2</mn><mo>|</mo><msup><msub><mi>e</mi><mi>x</mi></msub><mo>&prime;</mo></msup><mo>|</mo><mo>-</mo><mn>1</mn></mtd><mtd><msup><msub><mi>e</mi><mi>x</mi></msub><mo>&prime;</mo></msup><mo>&lt;</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>(5-2)参数计算子步骤,计算前编码长度最大值L和后编码长度k:L=E<sub>m</sub>-b-1,<img file="FDA0000065529160000034.GIF" wi="393" he="134" />L<sub>m</sub>为Golomb编码的最长编码长度,b为图像像素灰度值比特位的位宽;A[q]表示对应上下文参数索引值q的已编码像素累积的预测误差绝对值之和,由数组A[]的存储器中读出;N[q]表示对应上下文参数索引值q的已编码像素个数,由数组N[]的存储器中读出;(5-3)编码子步骤,包括下述过程:A.判断是否<img file="FDA0000065529160000041.GIF" wi="242" he="73" />是则转过程B,否则转过程C;B.编码长度共<img file="FDA0000065529160000042.GIF" wi="263" he="73" />个比特位,分为前后两部分:前一部分为<img file="FDA0000065529160000043.GIF" wi="134" he="73" />个比特位全“0”再加一个比特位“1”;后一部分为k个比特位二进制表示的E/2<sup>k</sup>的余数;C.进行限长Golomb编码,编码长度共L<sub>m</sub>个比特位,分为前后两部分:前一部分为L个比特位全“0”再加一个比特位“1”;后一部分为b个比特位二进制表示的E-1;(6)数据聚合步骤:将当前像素的Glomb编码结果顺序放入一个定长数据包,定长数据包为N位比特位,N≥32,根据需要选择,每装满一个定长数据包便将其传出,当前像素的Glomb编码结果多出的比特位顺序放入下一个定长数据包;(7)梯度计算步骤:计算上下文局部梯度值D[m],并映射为相应的量化值Q[m],计算出上下文参数索引值q和符号位s,包括下述子步骤:(7-1)计算三个局部梯度值D[m],m=1、2、3:D[1]=f(i-1,j+1)-f(i-1,j),D[2]=f(i-1,j)-f(i-1,j-1),D[3]=f(i-1,j-1)-f(i,j-1),(7-2)将D[m]映射为相应的量化值Q[m],m=1、2、3:<maths num="0007"><![CDATA[<math><mrow><mi>Q</mi><mo>[</mo><mi>m</mi><mo>]</mo><mo>=</mo><mfenced open='{' close='' separators=''><mtext></mtext><mtable><mtr><mtd><mn>0</mn></mtd><mtd><mi>D</mi><mo>[</mo><mi>m</mi><mo>]</mo><mo>=</mo><mn>0</mn></mtd></mtr><mtr><mtd><mn>1</mn></mtd><mtd><mn>0</mn><mo>&lt;</mo><mi>D</mi><mo>[</mo><mi>m</mi><mo>]</mo><mo>&lt;</mo><mi>T</mi><mn>1</mn></mtd></mtr><mtr><mtd><mn>2</mn></mtd><mtd><mi>T</mi><mn>1</mn><mo>&le;</mo><mi>D</mi><mo>[</mo><mi>m</mi><mo>]</mo><mo>&lt;</mo><mi>T</mi><mn>2</mn></mtd></mtr><mtr><mtd><mn>3</mn></mtd><mtd><mi>T</mi><mn>2</mn><mo>&le;</mo><mi>D</mi><mo>[</mo><mi>m</mi><mo>]</mo><mo>&lt;</mo><mi>T</mi><mn>3</mn></mtd></mtr><mtr><mtd><mn>4</mn></mtd><mtd><mi>D</mi><mo>[</mo><mi>m</mi><mo>]</mo><mo>&GreaterEqual;</mo><mi>T</mi><mn>3</mn></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths>或<maths num="0008"><![CDATA[<math><mrow><mi>Q</mi><mo>[</mo><mi>m</mi><mo>]</mo><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mo>-</mo><mn>1</mn></mtd><mtd><mo>-</mo><mi>T</mi><mn>1</mn><mo>&lt;</mo><mi>D</mi><mo>[</mo><mi>m</mi><mo>]</mo><mo>&lt;</mo><mn>0</mn></mtd></mtr><mtr><mtd><mo>-</mo><mn>2</mn></mtd><mtd><mo>-</mo><mi>T</mi><mn>2</mn><mo>&lt;</mo><mi>D</mi><mo>[</mo><mi>m</mi><mo>]</mo><mo>&le;</mo><mo>-</mo><mi>T</mi><mn>1</mn></mtd></mtr><mtr><mtd><mo>-</mo><mn>3</mn></mtd><mtd><mo>-</mo><mi>T</mi><mn>3</mn><mo>&lt;</mo><mi>D</mi><mo>[</mo><mi>m</mi><mo>]</mo><mo>&le;</mo><mo>-</mo><mi>T</mi><mn>2</mn></mtd></mtr><mtr><mtd><mo>-</mo><mn>4</mn></mtd><mtd><mi>D</mi><mo>[</mo><mi>m</mi><mo>]</mo><mo>&le;</mo><mo>-</mo><mi>T</mi><mn>3</mn></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>其中,比较参数T1,T2,T3的取值如下:<tables num="0001"><table><tgroup cols="4"><colspec colname="c001" colwidth="57%" /><colspec colname="c002" colwidth="14%" /><colspec colname="c003" colwidth="14%" /><colspec colname="c004" colwidth="14%" /><tbody><row><entry morerows="1">  图像像素灰度值比特位位宽</entry><entry morerows="1">  T1</entry><entry morerows="1">  T2</entry><entry morerows="1">  T3</entry></row><row><entry morerows="1">  ≤8</entry><entry morerows="1">  3</entry><entry morerows="1">  7</entry><entry morerows="1">  21</entry></row><row><entry morerows="1">  >8</entry><entry morerows="1">  18</entry><entry morerows="1">  67</entry><entry morerows="1">  276</entry></row></tbody></tgroup></table></tables>(7-3)计算上下文参数索引值q和符号位s:<maths num="0009"><![CDATA[<math><mrow><mi>q</mi><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>q</mi><mi>t</mi></msub></mtd><mtd><msub><mi>q</mi><mi>t</mi></msub><mo>&GreaterEqual;</mo><mn>0</mn></mtd></mtr><mtr><mtd><mo>-</mo><msub><mi>q</mi><mi>t</mi></msub></mtd><mtd><msub><mi>q</mi><mi>t</mi></msub><mo>&lt;</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths><maths num="0010"><![CDATA[<math><mrow><mi>s</mi><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>1</mn></mtd><mtd><msub><mi>q</mi><mi>t</mi></msub><mo>&GreaterEqual;</mo><mn>0</mn></mtd></mtr><mtr><mtd><mo>-</mo><mn>1</mn></mtd><mtd><msub><mi>q</mi><mi>t</mi></msub><mo>&lt;</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths>式中,q<sub>t</sub>=81×Q[1]+9×Q[2]+Q[3];等待步骤(5)的子步骤(5-1)结果,再进行步骤(8);(8)上下文环境参数更新步骤,顺序包括下述子步骤:(8-1)更新A[q]、B[q]:A[q]=A[q]+|E|,B[q]=B[q]+E;A[q]由A[q]的存储器中读出;B[q]表示对应上下文参数索引值q的已编码像素的预测误差值,由B[q]的存储器中读出;(8-2)判断N[q]是否大于64,是则转子步骤(8-3),否则转子步骤(8-4);(8-3)更新A[q]、B[q]、N[q]:<img file="FDA0000065529160000061.GIF" wi="433" he="63" /><img file="FDA0000065529160000062.GIF" wi="430" he="63" /><img file="FDA0000065529160000063.GIF" wi="447" he="62" />(8-4)更新N[q]:N[q]=N[q]+1;(8-5)判断是否C[q]>-128且B[q]≤-N[q],是则转子步骤(8-6),否则转子步骤(8-7);(8-6)更新C[q]、B[q]:C[q]=C[q]-1,B[q]=max(B[q]+N[q],1-N[q]);(8-7)判断是否C[q]<127且B[q]>0,是则转子步骤(8-8),否则结束;(8-8)更新C[q]、B[q]:C[q]=C[q]+1,B[q]=min(B[q]-N[q],0);(8-9)将更新的A[q]、B[q]、C[q]、N[q]分别写入对应的A[]、B[]、C[]、N[]四个存储器。
地址 430074 湖北省武汉市洪山区珞喻路1037号