基于改进方块编码的二值ROI掩模编码方法与流程

文档序号:12822705阅读:1083来源:国知局
基于改进方块编码的二值ROI掩模编码方法与流程

本发明属于图像处理技术领域,特别涉及一种二值roi掩模编码方法,可用于实现遥感云图roi掩模的高效编码。



背景技术:

方块编码最早用于二值图像的编码,如传真图像,由于方法简单有效进而推广到了灰度图像的编码之中。方块编码分为两个过程:分块扫描和哈夫曼编码:首先选择设定大小的分块对图像进行划分,然后将分块内灰度值的排列信息作为表示该分块的消息,并用相应的符号表示,再扫描整个图像,将所有分块对应的符号组成一维的符号序列,最后对符号序列进行哈夫曼编码。

传统的这种方块编码有效地利用了二值图像的空间相关性,但是在对符号序列的编码上,由于没有考虑到不同二值图像对应符号序列的特性,一律使用传统的哈夫曼编码方法,因而降低了符号序列编码的效率。



技术实现要素:

本发明的目的在于针对上述现有技术的不足,提出一种基于改进方块编码的二值roi掩模编码方法,提高roi掩模的编码效率。

本发明的技术思路是:针对roi掩模的区域性和这些区域所对应的符号序列存在大量的统计冗余的特点,利用roi掩模像素间的空间相关性对roi掩模进行分块处理,通过对每个分块进行符号包装,得到一维的符号序列,对roi掩模的编码即为符号序列的编码,通过对符号序列中出现次数最多、连续性最强的符号‘0’的单独处理,计算其游程数组,实行对游程数组和修正后符号序列的编码。其具体实现方案包括如下:

(1)对roi掩模图像按照从上到下、从左到右的顺序进行3*3分块,将分块内像素值读取为一个九位的二进制0、1序列,并将该二进制序列转换为十进制的值,作为表示该分块的符号;再按照从上到下从左到右的顺序,扫描所有的3*3分块,将所有的符号读取为一维的符号序列;

(2)遍历一维符号序列,计算符号序列中‘0’符号的游程数组,并将符号序列中连续的符号‘0’用相应的一个符号替换,得到修正后的符号序列;

(3)分别对游程数组和修正后的符号序列进行哈夫曼编码,再将两者的编码码流合并,得到最终的编码码流。

本发明与现有技术相比较,具有如下优点:

第一、本发明利用到了roi掩模的空间相关性,减少了roi掩模的统计冗余

第二、本发明可以使用更短的码流完成roi掩模的编码,提高了roi掩模的编码效率。

附图说明

图1是本发明的实现流程图;

图2是本发明中对分块扫描的示意图。

具体实施方式

以下结合附图和实施例,对本发明作进一步详细的描述。

步骤1,对roi掩模分块,获得符号序列。

(1a)创建二维数组a,将在感兴趣区域提取得到的感兴趣区域roi掩模读取到二维数组a中,并进行3*3的分块操作,并按照图2所示的方法对分块内的像素值进行读取,得到二进制序列;

(1b)创建变量t,用于存储分块所对应的符号,并初始化为0,再从高位到低位遍历二进制序列,并给t加上二进制序列中每一位对应的十进制值,遍历结束后得到分块对应的符号;

(1c)遍历所有分块对应的符号,得到符号序列。

步骤2,遍历符号序列,得到符号‘0’的游程数组和修正后的符号序列。

(2a)创建一维数组b,用于存储符号‘0’的游程,并初始化为空;

(2b)从符号序列的第一个符号开始遍历,判断符号是否为‘0’:

如果符号不为‘0’,则跳过该符号,执行(2c);

如果符号为‘0’,则计算该符号之后连续为‘0’的数量n,将n加入到数组b之中,并跳过n个符号‘0’,执行(2c);

(2c)判断是否到达符号序列的末尾:

如果没有到达末尾,则返回(2b)继续遍历;

如果到达末尾,则遍历结束,得到符号‘0’的游程数组;

(2d)从符号序列的第一个符号再次遍历,判断符号是否为‘0’:

如果符号不为‘0’,则跳过该符号,执行(2e);

如果符号为‘0’,则删除该符号之后所有连续为‘0’的符号,并跳过该符号,执行(2e);

(2e)判断是否到达符号序列的末尾:

如果没有到达末尾,则执行步骤(2d);

如果到达末尾,则遍历结束,得到修正后的符号序列。

步骤3,对步骤2得到的结果进行哈夫曼编码,合并码流。

(3a)计算符号‘0’的游程数组中每个值的概率,并根据每个值所对应的概率大小来分配码长:值的概率越大则分配的码长越短,概率越小则分配的码长越长,最后根据分配的码字对游程数组所有的值进行编码,得到符号‘0’的游程数组的编码码流;

(3b)计算修正后的符号序列中每个符号的概率,根据符号所对应的概率大小来分配码长:符号的概率越大分配的码长越短,概率越小分配的码长越长,最后根据分配的码字对修正后的符号序列中所有的符号进行编码,得到修正后的符号序列的编码码流;

(3c)将(3a)得到的符号‘0’的游程数组的编码码流长度,添加到游程数组的编码码流前,并将步骤(3b)得到的修正后的符号序列的编码码流拼接到游程数组的编码码流之后,完成码流的合并,得到最终的编码码流。

以符号序列{2,0,0,0,0,511,511,5,0,0,0}为例,对本步骤的具体实施描述如下:

首先,执行步骤(2a)到(2c),得到符号‘0’的游程数组为[43],并执行步骤(2d)到(2e)得到修正后的符号序列为{2,0,511,511,5,0};

接着,执行步骤(3a),对游程数组进行编码,由于游程数组中4和3两个值的概率相同,因此给这两个值分配相同长度的码长,分别为0和1,根据分配的码长对游程数组进行编码,得到编码码流‘01’。

接着,执行步骤(3b),计算修正后的符号序列中符号‘2’、‘0’、‘511’和‘5’的概率,分别为并给概率最大的符号‘0’和‘511’分配长度为1的码长,分别为0和1;给概率较小的符号‘2’和‘511’,分配长度为2的码长,分别为01和10;再根据分配的码长对修正后的符号序列进行编码,得到编码码流‘01011100’;

最后,执行步骤(3c),计算游程数组的编码码流长度为2,并用一个字节00000010表示,接着将这一个字节添加到游程数组的编码码流‘01’之前,得到码流‘0100000010’;并将修正后的符号序列的编码码流‘01011100’添加码流‘0100000010’之后,最终得到码流为‘010000001001011100’,完成对roi掩模的编码。

以上描述仅是本发明的一个具体实例,并未构成对本发明的任何限制,显然对于本领域的专业人员来说,在了解了本发明内容和原理后,都可能在不背离本发明原理、结构的情况下,进行形式和细节上的各种修改和改变,但是这些基于本发明思想的修正和改变仍在本发明的权利求保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1