首页> 中国专利> 基于JPEG文件流的图片分割方法

基于JPEG文件流的图片分割方法

摘要

本发明公开了一种基于JPEG文件流的图片分割方法,步骤包括:步骤1、根据JPEG编码原理以及其数据流格式,获取图片的大小、重入间隔、采样因子信息;步骤2、根据JPEG图片大小和读出的重入间隔数计算图片的分割块数;步骤3、根据上述所分块数对JPEG图片进行分块,循环对JPEG图片进行分块读取。本发明的方法,有效的解决了尺寸各异尤其是超大图片耗费大量内存与时间,效率低下的问题,具有内存使用量小且稳定等优势。

著录项

  • 公开/公告号CN103778631A

    专利类型发明专利

  • 公开/公告日2014-05-07

    原文格式PDF

  • 申请/专利权人 西安理工大学;

    申请/专利号CN201410020259.2

  • 发明设计人 孙钦东;贺毅;王艳;张景鹏;王健;

    申请日2014-01-16

  • 分类号G06T7/00(20060101);G06T9/00(20060101);

  • 代理机构61214 西安弘理专利事务所;

  • 代理人李娜

  • 地址 710048 陕西省西安市金花南路5号

  • 入库时间 2024-02-19 23:58:24

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-06-12

    专利权的转移 IPC(主分类):G06T7/00 登记生效日:20180523 变更前: 变更后: 申请日:20140116

    专利申请权、专利权的转移

  • 2017-01-18

    授权

    授权

  • 2014-06-11

    实质审查的生效 IPC(主分类):G06T7/00 申请日:20140116

    实质审查的生效

  • 2014-05-07

    公开

    公开

说明书

技术领域

本发明属于图像分割技术领域,涉及一种基于JPEG文件流的图片分割 方法。

背景技术

随着科技的不断进步,数码相机的普及率也不断提高,数码照片的数量 呈现爆炸性增长,大幅婚纱照、写真照片及广告图片十分普遍。对于冲印公 司来说,要将尺寸大小不一、规格繁多的数码照片输出冲印到指定规格的相 纸上,解决尺寸超大图片如何读入问题至关重要。

超大图片读入问题属于图像分割问题,在此之前,图片分割算法的研究 已经有几十年的历史,一直都受到人们的高度重视。关于图像分割的原理和 方法国内外已有不少的研究成果,但一直以来没有一种分割方法适用于所有 图像分割处理。

然而,在实际操作中,对于影楼、写真馆、数码冲印部门来说,大部分 数码图片都是JPEG格式的,超大图片耗费大量内存与读入时间,效率低下, 因此,研究一种既能不失真的将JPEG图片进行分割读取,又能在读取尺寸 各异尤其是超大尺寸的图片时不多占用计算机内存,具有巨大的应用价值。

发明内容

本发明的目的是提供一种基于JPEG文件流的图片分割方法,解决了现 有技术中存在的读取尺寸各异尤其是超大尺寸的图片时占用较多计算机内 存,读入时间较长,工作效率低下的问题。

本发明所采用的技术方案是,一种基于JPEG文件流的图片分割方法, 按照以下步骤具体实施:

步骤1:根据标准JPEG文件的数据流格式,读取JPEG图片的大小和 位置、分辨率、头文件结束位置、重入间隔数以及采样因子,

参照表1中的JPEG文件的数据流格式实施;

步骤2:根据JPEG图片大小和读出的重入间隔数计算图片的分割块数

步骤2.1)根据步骤1获取的JPEG图片中不同颜色的采样因子,即Y、 Cr、Cb三个分量各自的水平采样因子和垂直采样因子,确定最小编码单元 MCU的大小;

步骤2.2)根据步骤1中读出的JPEG图片宽度和步骤2.1)中得出的 MCU的宽度大小计算宽度下的MCU的个数C,则有:C=W/w',

其中的W为图片宽度,w'为MCU的宽度,若所求C不为整数,则将C 取整数部分后加1;

步骤2.3)根据步骤1读出的重入间隔数和C的个数计算每个重入间隔 下的高度方向MCU的个数C',则有:C'=I/C,

其中的I为重入间隔大小,C为宽度下的MCU的个数,

进而计算出每个重入间隔的高度h,则有:h=C'*h',

其中的h'为MCU高度;

步骤2.4)计算重入间隔的数目M,则有:M=H/h',

其中的H为图片高度,h'为MCU高度;

步骤2.5)根据表1中的标准JPEG文件的数据流格式,将MCU块的单 元中的重新开始间隔设为n,则表示每n个MCU块就有一个RSTn标记,第 一个标记是RST0,第二个是RST1等,RST7后再从RST0重复,

根据以上描述计算重入的0XFFD7的个数N',N'=M/8,若结果不为整 数则取出不满足8的倍数的重入间隔数L,则有:L=M%8;

步骤2.6)根据步骤2.5)计算出的重入0XFFD7的个数N'确定一个基数 N,计算JPEG图片所分块数A,则有:A=N'/N,

若所求块数不为整数,则计算余数M=N'%N,

若余数M为8的整数倍,则A=A+1,否则A=A+2;

步骤3、根据所分块数A对JPEG图片进行分块,循环对JPEG图片进 行分块读取,按照三种具体情况分别进行读取。

本发明的有益效果是,根据JPEG文件数据流格式,获取图片尺寸,根 据所获取图片的尺寸智能化的确定图片所分块数;然后运用JPEG图片编码 和解码流程和区域分割的方法,将图像中满足相似性准则的像素或子区域合 成更大的区域,并且从整个图像出发,根据图像和各个区域的不均匀性,把 图像分割成新的子区域,分局毗邻区域的均匀性,把毗邻的子区域合并成新 的较大的区域。在实际操作中用户可以选定任意尺寸的图片读入进行排版, 最后合成大图进行输出,有效的解决了超大图片耗费大量内存与时间,读入 效率低下的问题,具有内存使用量小且稳定的优势。

本发明方法对所有图片均有效,但对于超大图片,尤其是不能一次读入 内存进行处理时的情况下,本发明的意义尤为突出。

附图说明

图1是本发明方法基于JPEG编码的原理示意图;

图2是本发明方法中的图片最小编码单元序列;

图3是本发明方法用于超大图片分割的实施例示意图。

具体实施方式

下面结合附图和具体实施方式对本发明进行详细说明。

图1是本发明方法基于JPEG编码的原理示意图,JPEG图像编码是以 最小编码单元(Minimum Coded Unit,MCU)进行编码,最小编码单元之间 以差分编码算法进行编码,然后将编码写入JPEG文件数据流。

本发明基于JPEG文件流的图片分割方法,按照以下步骤具体实施:

步骤1:根据标准JPEG文件的数据流格式,读取JPEG图片的大小和 位置、分辨率、头文件结束位置、重入间隔数以及采样因子,

MCU块的单元中的重新开始间隔,例如为n,即每n个MCU块就有一 个RSTn标记。第一个标记是RST0,第二个是RST1等,RST7后再从RST0 重复。表1为JPEG文件的数据流格式。

表1,标准JPEG文件的数据流格式

段名 标识码(Tag) 说明 SOI FFD8 图像开始 APP0 FFE0 JFIF应用数据块 APPn FFE1-FFEn 其他的应用数据块(n,1~15) DQT FFDB 量化表 SOF0 FFC0 帧开始 DHT FFC4 霍夫曼(Huffman)表 SOS FFDA 扫描线开始 EOI FFD9 图像结束

步骤2:根据JPEG图片大小和读出的重入间隔数计算图片的分割块数

步骤2.1)根据步骤1获取的JPEG图片中不同颜色的采样因子,即Y、 Cr、Cb三个分量各自的水平采样因子和垂直采样因子,确定最小编码单元 (Minimum Coded Unit,MCU)的大小。

所谓MCU,是JPEG图片中一个正方矩阵像素的数据。大多数JPEG图 片的采样因子为4:1:1或1:1:1。其中,4:1:1即(2*2):(1*1):(1*1)); 1:1:1即(1*1):(1*1):(1*1)。记三个分量中水平采样因子最大值为Hmax, 垂直采样因子最大值为Vmax,那么单个MCU矩阵的宽就是Hmax*8像素, 高就是Vmax*8像素。所以对于采样因子为4:1:1的图片,其MCU宽度和高 度都为16像素;对于采样因子为1:1:1的图片,其MCU宽度和高度都为 8像素,参照图2。

图2是本发明方法实施例的图片最小编码单元序列,图2是一幅32px ×36px的图像MCU序列,粗虚线表示各个MCU的分界,细虚线表示MCU 内部数据单元的分界。假定此图的采样因子为4:1:1,则Hmax=2,Vmax=2, MCU的宽为16像素,高为16像素,该图像整体宽度恰好是两个MCU,整 体高度则稍稍大于两个MCU的高度,所以要补足3行MCU。在JPEG数据 流中,MCU的顺序是MCU1→MCU2→MCU3→MCU4→MCU5→MCU6。 每个MCU又分为4个8×8的数据单元,分块读取数据流每次读取的就是整 数倍的MCU。

步骤2.2)根据步骤1中读出的JPEG图片宽度和步骤2.1)中得出的 MCU的宽度大小计算宽度下的MCU的个数C,

C=W/w',W为图片宽度,w'为MCU的宽度,若所求C不为整数,则 将C取整数部分后加1;

步骤2.3)根据步骤1读出的重入间隔数和C的个数计算每个重入间隔 下的高度方向MCU的个数C',C'=I/C,I为重入间隔大小,C为宽度下的 MCU的个数,进而计算出每个重入间隔的高度h,则有:

h=C'*h',h'为MCU高度;

步骤2.4)计算重入间隔的数目M,则有:

M=H/h',H为图片高度,h'为MCU高度;

步骤2.5)根据表1中的标准JPEG文件的数据流格式,将MCU块的单 元中的重新开始间隔设为n,则表示每n个MCU块就有一个RSTn标记,第 一个标记是RST0,第二个是RST1等,RST7后再从RST0重复,

根据以上描述计算重入的0XFFD7的个数N',N'=M/8,若结果不为整 数则取出不满足8的倍数的重入间隔数L,则有:

L=M%8(这是取余运算,这个结果就是取得余数);

步骤2.6)根据步骤2.5)计算出的重入0XFFD7的个数N'确定一个基数 N,计算JPEG图片所分块数A,则有:

A=N'/N,若所求块数不为整数,则计算余数M=N'%N,若余数M为8 的整数倍,则A=A+1,否则A=A+2。

步骤3、根据上述所分块数A对JPEG图片进行分块,循环对JPEG图 片进行分块读取,按照三种具体情况分别进行读取:

情况一:当读取的块不是最后2块时,其余块的处理情况相同,根据步 骤1读取的采样因子确定的每个MCU的高度以及分块基数N确定每块的高 度H',则有:H'=8*h*N,

其中的h为MCU的高度,N为分块基数,8为0XFFDn的个数,

在JPEG文件头数据流的高度所在位置修改该块的图片高度,读取N个 0xFFD7的数据流并在读取的JPEG文件流的末尾写入0XFFD9,即JPEG文 件流的结束标记,以保证图片数据流的完整性,将该数据流进行读取。

情况二:当读取的块为倒数第二块,即不够基数N倍的0XFFD7的整 数倍,则每块高度H''=S*h*8,

其中的S为剩余的0XFFD7的个数,h为MCU的高度,8为0XFFDn 的个数,

读取文件头数据流,在文件头数据流的高度位置修改块高度,读取S个 0xFFD7的数据流并在读取的JPEG文件流的末尾写入0XFFD9,将该数据流 进行读取。

情况三:当读取的块为最后一块,每块高度H''',

H'''=H-H'*(A-2)-H'',其中的H为原图片高度,H'为情况一分块的块高, A为分的总块数,H''为情况二分块的高度,

读取文件头数据流,在文件头数据流的高度位置修改块高度,读取剩余 的JPEG文件数据流。

实施例

参照图3,是采用本发明方法对76*180像素的图片进行分割的效果示意 图。采用传统方法只能整张图片进行读取,会出现内存不足及读取时间长的 现象;而用本发明方法分割后将图片的各个部分依次进行读取,就能够避免 此种现象,提高工作效率。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号