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

文档序号:6535905阅读:786来源:国知局
基于jpeg文件流的图片分割方法
【专利摘要】本发明公开了一种基于JPEG文件流的图片分割方法,步骤包括:步骤1、根据JPEG编码原理以及其数据流格式,获取图片的大小、重入间隔、采样因子信息;步骤2、根据JPEG图片大小和读出的重入间隔数计算图片的分割块数;步骤3、根据上述所分块数对JPEG图片进行分块,循环对JPEG图片进行分块读取。本发明的方法,有效的解决了尺寸各异尤其是超大图片耗费大量内存与时间,效率低下的问题,具有内存使用量小且稳定等优势。
【专利说明】基于JPEG文件流的图片分割方法
【技术领域】
[0001]本发明属于图像分割【技术领域】,涉及一种基于JPEG文件流的图片分割方法。
【背景技术】
[0002]随着科技的不断进步,数码相机的普及率也不断提高,数码照片的数量呈现爆炸性增长,大幅婚纱照、写真照片及广告图片十分普遍。对于冲印公司来说,要将尺寸大小不一、规格繁多的数码照片输出冲印到指定规格的相纸上,解决尺寸超大图片如何读入问题
至关重要。
[0003]超大图片读入问题属于图像分割问题,在此之前,图片分割算法的研究已经有几十年的历史,一直都受到人们的高度重视。关于图像分割的原理和方法国内外已有不少的研究成果,但一直以来没有一种分割方法适用于所有图像分割处理。
[0004]然而,在实际操作中,对于影楼、写真馆、数码冲印部门来说,大部分数码图片都是JPEG格式的,超大图片耗费大量内存与读入时间,效率低下,因此,研究一种既能不失真的将JPEG图片进行分割读取,又能在读取尺寸各异尤其是超大尺寸的图片时不多占用计算机内存,具有巨大的应用价值。

【发明内容】

[0005]本发明的目的是提供一种基于JPEG文件流的图片分割方法,解决了现有技术中存在的读取尺寸各异尤其是超大尺寸的图片时占用较多计算机内存,读入时间较长,工作效率低下的问题。
[0006]本发明所采用的技术方案是,一种基于JPEG文件流的图片分割方法,按照以下步骤具体实施:
[0007]步骤1:根据标准JPEG文件的数据流格式,读取JPEG图片的大小和位置、分辨率、头文件结束位置、重入间隔数以及采样因子,
[0008]参照表I中的JPEG文件的数据流格式实施;
[0009]步骤2:根据JPEG图片大小和读出的重入间隔数计算图片的分割块数
[0010]步骤2.1)根据步骤I获取的JPEG图片中不同颜色的采样因子,即Y、Cr、Cb三个分量各自的水平采样因子和垂直采样因子,确定最小编码单元MCU的大小;
[0011]步骤2.2)根据步骤I中读出的JPEG图片宽度和步骤2.1)中得出的MCU的宽度大小计算宽度下的MCU的个数C,则有-.C=W,
[0012]其中的W为图片宽度,w’为MCU的宽度,若所求C不为整数,则将C取整数部分后加I ;
[0013]步骤2.3)根据步骤I读出的重入间隔数和C的个数计算每个重入间隔下的高度方向MCU的个数C,,则有:C’ =I/C,
[0014]其中的I为重入间隔大小,C为宽度下的MCU的个数,
[0015]进而计算出每个重入间隔的高度h,则有:h=C’ *h’,[0016]其中的h’为MCU高度;
[0017]步骤2.4)计算重入间隔的数目M,则有:M=H/h’,
[0018]其中的H为图片高度,h’为MCU高度;
[0019]步骤2.5)根据表I中的标准JPEG文件的数据流格式,将MCU块的单元中的重新开始间隔设为n,则表示每n个MCU块就有一个RSTn标记,第一个标记是RSTtl,第二个是RST1等,RST7后再从RSTci重复,
[0020]根据以上描述计算重入的0XFFD7的个数N’,N’=M/8,若结果不为整数则取出不满足8的倍数的重入间隔数L,则有:L=M%8 ;
[0021]步骤2.6)根据步骤2.5)计算出的重入0XFFD7的个数N’确定一个基数N,计算JPEG图片所分块数A,则有:A=N’ /N,
[0022]若所求块数不为整数,则计算余数M=N’ %N,
[0023]若余数M为8的整数倍,则A=A+1,否则A=A+2 ;
[0024]步骤3、根据所分块数A对JPEG图片进行分块,循环对JPEG图片进行分块读取,按照三种具体情况分别进行读取。
[0025]本发明的有益效果是,根据JPEG文件数据流格式,获取图片尺寸,根据所获取图片的尺寸智能化的确定图片所分块数;然后运用JPEG图片编码和解码流程和区域分割的方法,将图像中满足相似性准则的像素或子区域合成更大的区域,并且从整个图像出发,根据图像和各个区域的不均匀性,把图像分割成新的子区域,分局毗邻区域的均匀性,把毗邻的子区域合并成新的较大的区域。在实际操作中用户可以选定任意尺寸的图片读入进行排版,最后合成大图进行输出,有效的解决了超大图片耗费大量内存与时间,读入效率低下的问题,具有内存使用量小且稳定的优势。
[0026]本发明方法对所有图片均有效,但对于超大图片,尤其是不能一次读入内存进行处理时的情况下,本发明的意义尤为突出。
【专利附图】

【附图说明】
[0027]图1是本发明方法基于JPEG编码的原理不意图;
[0028]图2是本发明方法中的图片最小编码单元序列;
[0029]图3是本发明方法用于超大图片分割的实施例示意图。
【具体实施方式】
[0030]下面结合附图和【具体实施方式】对本发明进行详细说明。
[0031]图1是本发明方法基于JPEG编码的原理不意图,JPEG图像编码是以最小编码单兀(Minimum Coded Unit, MCU)进彳丁编码,最小编码单兀之间以差分编码算法进彳丁编码,然后将编码写入JPEG文件数据流。
[0032]本发明基于JPEG文件流的图片分割方法,按照以下步骤具体实施:
[0033]步骤1:根据标准JPEG文件的数据流格式,读取JPEG图片的大小和位置、分辨率、头文件结束位置、重入间隔数以及采样因子,
[0034]MCU块的单元中的重新开始间隔,例如为n,即每n个MCU块就有一个RSTn标记。第一个标记是RST0,第二个是RSTl等,RSI7后再从RSTO重复。表I为JPEG文件的数据流格式。
[0035]表1,标准JPEG文件的数据流格式
[0036]
【权利要求】
1.一种基于JPEG文件流的图片分割方法,其特点在于,按照以下步骤具体实施: 步骤1:根据标准JPEG文件的数据流格式,读取JPEG图片的大小和位置、分辨率、头文件结束位置、重入间隔数以及采样因子, 参照表1中的JPEG文件的数据流格式实施; 步骤2:根据JPEG图片大小和读出的重入间隔数计算图片的分割块数 步骤2.1)根据步骤I获取的JPEG图片中不同颜色的采样因子, 即Y、Cr、Cb三个分量各自的水平采样因子和垂直采样因子,确定最小编码单元MCU的大小; 步骤2.2)根据步骤I中读出的JPEG图片宽度和步骤2.1)中得出的MCU的宽度大小计算宽度下的MCU的个数C,则有-.C=W, 其中的W为图片宽度,w’为MCU的宽度,若所求C不为整数,则将C取整数部分后加I ;步骤2.3)根据步骤I读出的重入间隔数和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标记,第一个标记是RSTtl,第二个是RST1等,RST7后再从RSTci重复, 根据以上描述计算重入的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所述的基于JPEG文件流的图片分割方法,其特点在于:所述的表1的标准JPEG文件的数据流格式是:
3.根据权利要求1所述的基于JPEG文件流的图片分割方法,其特点在于:所述的MCU是JPEG图片中一个正方矩阵像素的数据,大多数JPEG图片的采样因子为4:1:1或1:1:1,
其中的 4:1:I 即(2*2): (1*1): (1*1));
其中的 1:1: I 即(1*1):(1*1):(1*1), 记三个分量中水平采样因子最大值为Hmax,垂直采样因子最大值为Vmax,那么单个MCU矩阵的宽就是Hmax*8像素,高就是Vmax*8像素,所以对于采样因子为4:1:1的图片,其MCU宽度和高度都为16像素;对于采样因子为1:1:1的图片,其MCU宽度和高度都为8像素。
4.根据权利要求1所述的基于JPEG文件流的图片分割方法,其特点在于,所述步骤3中,三种情况的具体读取过程是: 情况一:当读取的块不是最后2块时,其余块的处理情况相同,根据步骤I读取的采样因子确定的每个MCU的高度以及分炔基数N确定每块的高度H’,则有:H’ =8*h*N, 其中的h为MCU的高度,N为分炔基数,8为OXFFDn的个数, 在JPEG文件头数据流的高度所在位置修改该块的图片高度,读取N个0xFFD7的数据流并在读取的JPEG文件流的末尾写入0XFFD9,即JPEG文件流的结束标记,将该数据流进行读取; 情况二:当读取的块为倒数第二块,即不够基数N倍的0XFFD7的整数倍,则每块高度H’ ’ =S*h*8, 其中的S为剩余的0XFFD7的个数,h为MCU的高度,8为OXFFDn的个数, 读取文件头数据流,在文件头数据流的高度位置修改块高度,读取S个0xFFD7的数据流并在读取的JPEG文件流的末尾写入0XFFD9,将该数据流进行读取; 情况二:当读取的块为最后一块,每块闻度H’ ’ ’,则有:
H,’ ’ =H-H' * (A-2) -H,’, 其中的H为原图片高度,H’为情况一分块的块高,A为分的总块数,H’’为情况二分块的高度, 读取文件头数据流,在文件头数据流的高度位置修改块高度,读取剩余的JPEG文件数据流。
【文档编号】G06T9/00GK103778631SQ201410020259
【公开日】2014年5月7日 申请日期:2014年1月16日 优先权日:2014年1月16日
【发明者】孙钦东, 贺毅, 王艳, 张景鹏, 王健 申请人:西安理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1