• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于JPEG算法的Android圖像壓縮技術(shù)研究

    2016-10-31 20:36:03徐唐王錦楊丹
    電腦知識(shí)與技術(shù) 2016年22期

    徐唐+王錦+楊丹

    摘要:在現(xiàn)代的移動(dòng)應(yīng)用中,圖片會(huì)消耗大量數(shù)據(jù)流量。對(duì)圖片進(jìn)行壓縮是解決該問題的有效途徑之一。Android API提供了Bitmap類來對(duì)圖片進(jìn)行壓縮處理操作,但其性能并非最優(yōu),本文將JPEG算法應(yīng)用到Android程序開發(fā)領(lǐng)域進(jìn)行圖片壓縮,并引入PSNR值進(jìn)行評(píng)估。實(shí)驗(yàn)表明,在將圖片保存相同質(zhì)量和圖片PSNR值相近的情況下,JPEG算法能更加快速高效地壓縮圖片。

    關(guān)鍵詞:JPEG算法;Android;圖像壓縮;DCT;PSNR

    中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)22-0176-03

    Abstract: In modern mobile applications, the picture will consume a lot of data traffic. Image compression is one of the effective ways to solve the problem. Android API provides the Bitmap class to perform image compression processing operation, but its performance is not optimal, this article will JPEG algorithm is applied to Android application development field image compression, and the introduction of PSNR value assessment. Experiments show that the same picture quality and save image PSNR value similar circumstances, JPEG algorithm can more quickly and efficiently compress image.

    Key words: JPEG algorithm; Android; image compression; DCT; PSNR

    自從2008年9月,Google公司正式發(fā)布了Android 1.0操作系統(tǒng)以來,Android憑借其開放性、開發(fā)便捷以及豐富的硬件支持,受到廣大移動(dòng)應(yīng)用開發(fā)人員的青睞,使其在移動(dòng)開發(fā)市場份額迅速躍居全球第一[1]。據(jù)有關(guān)市場研究機(jī)構(gòu)統(tǒng)計(jì),截止2016年4月底,Android操作系統(tǒng)在全球所占份額已達(dá)到76%。

    基于Android系統(tǒng)的移動(dòng)設(shè)備,有智能手機(jī),平板電腦等,在人們的日常生活中越來越普及。以前由于手機(jī)像素不高,拍照相片質(zhì)量較小,所占的手機(jī)內(nèi)存和上傳網(wǎng)絡(luò)所用的數(shù)據(jù)流量很少,但隨著設(shè)備硬件的提升和人們對(duì)手機(jī)拍照要求的提高,手機(jī)攝像頭的像素也不斷提高,如一般機(jī)型三星GALAXY J7攝像頭像素達(dá)到1300萬,拍攝照片能達(dá)到10M以上,占據(jù)大量的數(shù)據(jù)存儲(chǔ)空間。如果將手機(jī)中的照片直接通過網(wǎng)絡(luò)上傳至遠(yuǎn)程的服務(wù)器中,如此大的圖片信息會(huì)導(dǎo)致上傳速度緩慢、消耗大量數(shù)據(jù)流量等問題。解決該問題可以依靠提高設(shè)備硬件水平、加大信道帶寬、壓縮大數(shù)據(jù)圖片等方法。

    圖像的壓縮算法有JPEG算法,JPEG2000算法,基于小波變換的圖像壓縮等。在Android程序開發(fā)中,目前最常用的方法是Android API提供的Bitmap類圖像壓縮,該方法的壓縮效率不是很高。本文對(duì)靜態(tài)圖像數(shù)據(jù)壓縮JPEG算法進(jìn)行研究,并將該算法應(yīng)用到Android應(yīng)用程序的圖片壓縮中。

    1 Android系統(tǒng)Bitmap類壓縮

    Android API提供的Bitmap類是處理圖像的主要類之一,不僅獲取圖像信息,還可以圖像進(jìn)行裁剪、旋轉(zhuǎn)、放大縮小等操作,對(duì)圖像指定保存格式。Bitmap類實(shí)現(xiàn)在android.graphics包中。Bitmap是一個(gè)私有的構(gòu)造函數(shù),不能 對(duì)外實(shí)例化,只能通過JIN實(shí)例化,由BitmapFactory類實(shí)現(xiàn)對(duì)JNI接口來實(shí)例化。

    Bitmap類對(duì)圖像進(jìn)行壓縮的方法是compress(Bitmap.CompressFormat format, int quality, OutputStream stream),其中format是圖像的壓縮格式(JPRG和PNG),quality是圖像保存質(zhì)量,值為1-100范圍的整數(shù),100為高質(zhì)量保存,1為低質(zhì)量保存,stream是寫入壓縮數(shù)據(jù)的輸入流。

    2 JPEG壓縮算法

    JPEG算法是由IEO和ISO兩個(gè)組織機(jī)構(gòu)制定的靜態(tài)數(shù)字圖像數(shù)據(jù)壓縮編碼標(biāo)準(zhǔn),是國際上通用的標(biāo)準(zhǔn)。因此又被稱為JPEG標(biāo)準(zhǔn)[2]。該算法對(duì)灰度圖像和彩色圖像都能夠提供良好的壓縮性能,還具有很好的重建質(zhì)量,因此廣泛應(yīng)用于視頻和圖像處理領(lǐng)域。目前網(wǎng)站上80% 的圖像都是采用的JPEG壓縮算法。jpeg是一種非常靈活的格式,具有調(diào)節(jié)圖像質(zhì)量的功能。可以用不同的壓縮比例對(duì)圖像進(jìn)行壓縮,壓縮比越小,品質(zhì)就越高,相反地,品質(zhì)就越低[3]。

    JPEG算法有4種工作模式,分別是順序編碼,分層編碼,漸進(jìn)編碼和無失真編碼其中基于順序編碼工作模式的壓縮系統(tǒng)被稱為基本系統(tǒng)。本文所用的順序編碼模式采用對(duì)圖像從左到右、從上到下掃描,將一幀圖像分為bit 數(shù)據(jù)塊,然后通過DCT變換、量化和編碼來調(diào)整圖像壓縮比和質(zhì)量。JPEG算法壓縮的主要驟(圖1):

    1)顏色模式轉(zhuǎn)換及采樣

    JPEG采用的顏色空間是YCrCb,而要處理的圖片是RGB顏色空間,所以在壓縮之前,首先要進(jìn)行顏色空間轉(zhuǎn)換。在YCrCb顏色空間中,Y代表亮度,Cr代表色度,Cb代表飽和度,三者一般用Y,U,V表示。如下是RGB和YCrCb的轉(zhuǎn)換公式[4]:

    研究表明,人的眼睛一般對(duì)亮度比較敏感,對(duì)色度和飽和度敏感度低,因此,在采樣時(shí)亮度Y的分量要多一些。通常采樣的比例是Y:U:V = 4:1:1或Y:U:V = 4:2:2,即Y每個(gè)像素都采樣,而U和V每四個(gè)像素采樣一次或每四個(gè)采樣兩次。這樣就達(dá)到了本來要用12個(gè)字節(jié)存儲(chǔ)的內(nèi)容,現(xiàn)在只需要用6個(gè)或8個(gè)字節(jié)存儲(chǔ),雖然損失了一定的精度,但人眼卻察覺不到。

    2)離散余弦變換(DCT變換)

    離散余弦變換簡稱DCT變換,是碼率壓縮中常用的變換編碼方法。DCT變換先將圖像分成8 × 8的像素塊,然后對(duì)每個(gè)像素塊進(jìn)行DCT操作。下面是JPEG編碼過程中的正向離散余弦變換公式和解碼過程中的反向離散余弦變換公式[5]:

    3)量化

    圖像經(jīng)過DCT變換以后,還需要進(jìn)行量化,才能進(jìn)入編碼過程[6]。量化的過程是由兩個(gè)的量化矩陣數(shù)據(jù),一個(gè)是處理亮度的頻率系數(shù)和針對(duì)色度的平率系數(shù)分別除以量化矩陣后的值取整數(shù),量化矩陣分別是JPEG亮度量化表(表1)和JPEG色度量化表(表2)。由于量化過程中將浮點(diǎn)數(shù)取為了整數(shù),造成了一定的數(shù)據(jù)精度不同。這也是有損壓縮過程中導(dǎo)致解碼無法恢復(fù)原圖質(zhì)量的主要原因[7]。量化公式為:

    其中為量化表對(duì)應(yīng)值

    4)編碼

    編碼過程分別有直流系數(shù)(DC)編碼,交流系數(shù)(AC)編碼和熵編碼。DC編碼由于DC直流系數(shù)值較大和相鄰圖像塊的DC系數(shù)值具有一定相關(guān)性這兩個(gè)特點(diǎn),因此采用了差分脈沖調(diào)制編碼(DPCM)技術(shù)。對(duì)相鄰圖像塊之間的量化DC系數(shù)的差值(De)進(jìn)行編碼[8],公式為:。

    量化AC系數(shù)的特點(diǎn)是除DA系數(shù)剩下的63個(gè)AC系數(shù)中有許多個(gè)“0”系數(shù),所以采用行程編碼(RLC, Run Length Coding)來降低數(shù)據(jù)量。RLC編碼方式是用兩個(gè)字節(jié)來代替一個(gè)字符串,第一個(gè)字節(jié)表示重復(fù)的次數(shù),第二個(gè)字節(jié)表示被重復(fù)的字符串。而在JPEG算法中其含義略有變化,當(dāng)RLC編碼過后得到(I,J)數(shù)據(jù)對(duì),其中I表示兩個(gè)非零AC系數(shù)之間連續(xù)的“0”的個(gè)數(shù),J表示下一個(gè)非零AC系數(shù)值,當(dāng)AC之間連續(xù)的“0”的個(gè)數(shù)超過16個(gè),則擴(kuò)展一個(gè)字節(jié)來表示。

    JPEG熵編碼主要有霍夫曼編碼(Huffman)和算術(shù)編碼,一般常用的是Huffman編碼。Huffman編碼是用簡單的查表(Lookup Table)方法進(jìn)行壓縮。在壓縮DC系數(shù)和AC系數(shù)的中間格式數(shù)據(jù)時(shí),Huffman編碼器將對(duì)出現(xiàn)頻率較低的符號(hào)分配較長的代碼,對(duì)出現(xiàn)頻率較高的符號(hào)分配較短的代碼[9]。由于AC系數(shù)和DC系數(shù),亮度和色度都采用不同的Huffman編碼表,因此完成熵編碼工作共需要4張Huffman編碼表。

    最后將各種標(biāo)記代碼和編碼后的圖像數(shù)據(jù)組成JPEG位圖數(shù)據(jù)流(JPEG bitstream),以方便傳輸、存儲(chǔ)和譯碼器進(jìn)行譯碼。

    3 實(shí)驗(yàn)過程及結(jié)果

    實(shí)驗(yàn)開始之前,首先在網(wǎng)上下載C語言編寫的libjpeg庫,該庫中包含廣泛使用的JPEG編解碼和其他JPEG功能的實(shí)現(xiàn)。使用libjpeg庫需要用到JIN技術(shù)[10]來自己調(diào)用C語言程序庫,不需要重寫Java庫文件,從而減少了大量程序開發(fā)的工作量。實(shí)驗(yàn)?zāi)康氖欠謩e用Bitmap類和libjpeg庫的方法壓縮圖片,設(shè)置保存圖片質(zhì)量分別在90,70,50,20,10的時(shí)候,判斷壓縮后兩張圖片的PSNR值相近的情況下,比較壓縮消耗的時(shí)間和壓縮倍數(shù),得出哪種方法綜合性能更好。

    峰值信噪比(PSNR值)是表示信號(hào)最大可能功率和影響它的表示精度的破壞性噪聲功率的比值。用于檢測圖像重建質(zhì)量的重要參數(shù),數(shù)值越小,表示圖像失真度越大,反之表示失真度越小[11] 。PSNR值可以通過Matlab計(jì)算得出,代碼如下:

    function PSNR = psnr(f1, f2) %計(jì)算圖f1,f2峰值信噪比

    k = 8; fm = 2.^k - 1; a = fm.^2;

    e = im2uint8(f1) - im2uint8(f2);

    [m, n] = size(e);

    b = mean(sum(sum(e.^2)));

    PSNR = 10*log10(m*n*a/b);

    實(shí)驗(yàn)所用的開發(fā)平臺(tái)是Eclipse 4.4,操作系統(tǒng)版本是Android 5.1.1,程序運(yùn)行在三星Galaxy J7智能手機(jī),原始大小為1775KB的jpeg格式圖像。下面是部分實(shí)驗(yàn)效果圖(圖2),程序運(yùn)行部分結(jié)果(圖3),表格為實(shí)驗(yàn)數(shù)據(jù)(表3):

    從表3中我們可以看出,在對(duì)圖片保存相同質(zhì)量的情況下,圖片PSNR值相近,但是JPEG算法所用的壓縮時(shí)間要少一倍,且壓縮倍數(shù)大大提高。說明JPEG算法的壓縮性能優(yōu)于Android系統(tǒng)提供的壓縮方法。

    Quality:保存質(zhì)量;Method:使用方法;Time:壓縮圖片耗時(shí);

    Size:壓縮后圖片大??;PSNR:峰值信噪比;Multiple:壓縮倍數(shù)。

    4 結(jié)束語

    本文對(duì)JPEG圖片壓縮算法應(yīng)用到Android平臺(tái)下進(jìn)行了研究。JPEG算法被廣泛應(yīng)用于圖片壓縮領(lǐng)域,本文將該算法應(yīng)用到Android程序應(yīng)用開發(fā)當(dāng)中,對(duì)仍然達(dá)到了很好的壓縮效果。雖然Android API提供了有效的圖片壓縮類Bitmap,經(jīng)過上述實(shí)驗(yàn)表明,當(dāng)以相同質(zhì)量保存圖片時(shí),JPEG壓縮算法在壓縮消耗的時(shí)間和壓縮倍數(shù)上要更勝一籌。

    參考文獻(xiàn):

    [1] 鄒紹武, 蘇貴斌. Android應(yīng)用開發(fā)中圖片壓縮技術(shù)的研究應(yīng)用[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2015(6): 106-109.

    [2] Acharya T, Tsai P S. JPEG2000 Standard for Image Compression: Concepts, Algorithms and VLSI Architectures[M]. 2005.

    [3] 萬榮澤, 莫洪武, 余思東. 基于量化表的圖像篡改檢測算法[J]. 電子技術(shù)應(yīng)用, 2014, 10: 124-126,130.

    [4] 錢鵬鶴. 基于JPEG壓縮技術(shù)在移動(dòng)終端上手寫信息的設(shè)計(jì)和實(shí)現(xiàn)[D]. 上海: 上海交通大學(xué), 2007.

    [5] 武瑛. DCT變換在圖像壓縮中的應(yīng)用[J]. 計(jì)算機(jī)與現(xiàn)代化, 2013(4): 103-106.

    [6] 張首君, 陳銀杰, 安孝寬, 等. 數(shù)字視頻信號(hào)的壓縮編碼原理[J]. 西北大學(xué)學(xué)報(bào):自然科學(xué)版, 2007(3): 379-383.

    [7] Acharya T, Ray A K. Image Processing: Principles and Applications[J]. Journal of Electronic Imaging, 2006, 15(3): 579-84.

    [8] 魏以民, 姚軼. 基于TMS320VC5509的JPEG編碼實(shí)現(xiàn)與優(yōu)化[C]//中國電子學(xué)會(huì)信號(hào)處理分會(huì)、中國儀器儀表學(xué)會(huì)信號(hào)處理分會(huì).第十四屆全國信號(hào)處理學(xué)術(shù)年會(huì)(CCSP-2009)論文集. 中國電子學(xué)會(huì)信號(hào)處理分會(huì)、中國儀器儀表學(xué)會(huì)信號(hào)處理分會(huì), 2009: 3.

    [8] 吳熙, 李相朋, 梁晶, 等. 基于Libjpeg的JPEG編碼的實(shí)現(xiàn)[J]. 電子制作, 2015(5): 111-112.

    [9] 蔣華, 孫婧. 基于JNI的電子簽章系統(tǒng)安全接口設(shè)計(jì)[J]. 信息技術(shù), 2016(3): 50-53.

    [10] 鄒文輝. 基于Huffman編碼的DSP圖像無損壓縮系統(tǒng)[J]. 西華師范大學(xué)學(xué)報(bào):自然科學(xué)版, 2014(3): 292-295.

    孟州市| 于都县| 盐山县| 赤峰市| 临颍县| 广东省| 阳新县| 武邑县| 丰顺县| 女性| 竹北市| 东丽区| 蚌埠市| 青田县| 广安市| 永济市| 运城市| 长海县| 建始县| 台州市| 晋宁县| 抚顺县| 辉县市| 东安县| 广昌县| 阜新| 浮山县| 天全县| 富裕县| 阳谷县| 奇台县| 大庆市| 晋城| 南投县| 高州市| 玉田县| 曲周县| 延津县| 堆龙德庆县| 阿城市| 鄂尔多斯市|