圖像二維整數(shù)離散余弦變換(dct)_變換算法和dsp實現(xiàn)課程設計_第1頁
圖像二維整數(shù)離散余弦變換(dct)_變換算法和dsp實現(xiàn)課程設計_第2頁
圖像二維整數(shù)離散余弦變換(dct)_變換算法和dsp實現(xiàn)課程設計_第3頁
圖像二維整數(shù)離散余弦變換(dct)_變換算法和dsp實現(xiàn)課程設計_第4頁
圖像二維整數(shù)離散余弦變換(dct)_變換算法和dsp實現(xiàn)課程設計_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、課 程 設 計 課程名稱 光電圖像處理綜合課程設計題目名稱 圖像二維整數(shù)離散余弦變換 (DCT) 變換算法和DSP實現(xiàn)2021年11月26日目錄一、離散余弦變換21、概念2、離散余弦變換用于圖像處理3、量化二、流程圖5三、程序中實現(xiàn)6四、輸出結果11一、離散余弦變換1、概念離散余弦變換(DCT for Discrete Cosine Transform)是與傅里葉變換相關的一種變換,它類似于離散傅里葉變換(DFT for Discrete Fourier Transform),但是只使用實數(shù)。離散余弦變換相當于一個長度大概是它兩倍的離散傅里葉變換,這個離散傅里葉變換是對一個實偶函數(shù)進行的(因為

2、一個實偶函數(shù)的傅里葉變換仍然是一個實偶函數(shù)),在有些變形里面需要將輸入或者輸出的位置移動半個單位(DCT有8種標準類型,其中4種是常見的)。最常用的一種離散余弦變換的類型是下面給出的第二種類型,通常我們所說的離散余弦變換指的就是這種。它的逆,也就是下面給出的第三種類型,通常相應的被稱為"反離散余弦變換","逆離散余弦變換"或者"IDCT"。有兩個相關的變換,一個是離散正弦變換(DST for Discrete Sine Transform),它相當于一個長度大概是它兩倍的實奇函數(shù)的離散傅里葉變換;另一個是改進的離散余弦變換(MDCT

3、for Modified Discrete Cosine Transform),它相當于對交疊的數(shù)據(jù)進行離散余弦變換。離散余弦變換,尤其是它的第二種類型,經(jīng)常被信號處理和圖像處理使用,用于對信號和圖像(包括靜止圖像和運動圖像)進行有損數(shù)據(jù)壓縮。這是由于離散余弦變換具有很強的"能量集中"特性:大多數(shù)的自然信號(包括聲音和圖像)的能量都集中在離散余弦變換后的低頻部分,而且當信號具有接近馬爾科夫過程(Markov processes)的統(tǒng)計特性時,離散余弦變換的去相關性接近于K-L變換(Karhunen-Loève 變換-它具有最優(yōu)的去相關性)的性能。2、離散余弦變換用

4、于圖像處理:圖像數(shù)據(jù)一般有較強的相關性,若所選用的正交矢量空間的基矢量與圖像本身的主要特征相近,在該正交矢量空間中描述圖像數(shù)據(jù)則會變得更簡單。 經(jīng)過正交變換,會把原來分散在原空間的圖像數(shù)據(jù)在新的坐標空間中得到集中。對于大多數(shù)圖像,大量變換系數(shù)很小,只要刪除接近于零的系數(shù),并且對較小的系數(shù)進行粗量化,而保留包含圖像主要信息的系數(shù),以此進行壓縮編碼。 在重建圖像進行解碼時,所損失的將是一些不重要的信息,幾乎不會引起圖像的失真。在變換編碼中,首先要將圖像數(shù)據(jù)分割成子圖像,然后對子圖像數(shù)據(jù)塊實施某種變換,如DCT變換,那么子圖像尺寸取多少好呢?根據(jù)實踐證明子圖像尺寸取4×4、8×8

5、、16×16適合作圖像的壓縮,這是因為:<1> 如果子圖像尺寸取得太小,雖然計算速度快,實現(xiàn)簡單,但壓縮能力有一定的限制。<2> 如果子圖像尺寸取得太大,雖然去相關效果變好,因為象DFT、DCT等正弦型變換均具有漸近最佳性,但也漸趨飽和。若尺寸太大,由于圖像本身的相關性很小,反而使其壓縮效果不顯示,而且增加了計算的復雜性。8*8FDCT和IDCT的普通算法如下:其中:離散余弦變換(Discrete Cosine Tranform,簡稱DCT)是一種與傅立葉變換緊密相關的數(shù)學運算。在傅立葉級數(shù)展開式中,如果被展開的函數(shù)式是偶函數(shù),那么其傅立葉級數(shù)中只包含余弦項,

6、再將其離散化可導出余弦變換,因此稱之為離散余弦變換。時間域中信號需要許多數(shù)據(jù)點表示;在x軸表示時間,在y軸表示幅度。信號一旦用傅立葉變換轉(zhuǎn)換到頻率域,就只需要幾點就可以表示這個相同的信號。如我們已經(jīng)看到的那樣,原因就是信號只含有少量的頻率成分。這允許在頻率域中只用幾個數(shù)據(jù)點就可以表示信號,而在時間域中表示則需要大量數(shù)據(jù)點。這一技術可以應用到彩色圖像上。彩色圖像有像素組成,這些像素具有RGB彩色值。每個像素都帶有x,y坐標,對每種原色使用8x8或者16x16矩陣。在灰度圖像中像素具有灰度值,它的x,y坐標由灰色的幅度組成。為了在JPEG中壓縮灰度圖像,每個像素被翻譯為亮度或灰度值。為了壓縮RGB

7、彩色圖像,這項工作必須進行三遍,因為JPEG分別得處理每個顏色成分,R成分第一個被壓縮,然后是G成分,最后是B成分。而一個8x8矩陣的64個值,每個值都帶有各自的x,y坐標,這樣我們就有了一個像素的三維表示法,稱作控件表達式或空間域。通過DCT變換,空間表達式就轉(zhuǎn)化為頻譜表達式或頻率域。從而到達了數(shù)據(jù)壓縮的目的。DCT式目前最佳的圖像變換,它有很多優(yōu)點。DCT是正交變換,它可以將8x8圖像空間表達式轉(zhuǎn)換為頻率域,只需要用少量的數(shù)據(jù)點表示圖像;DCT產(chǎn)生的系數(shù)很容易被量化,因此能獲得好的塊壓縮;DCT算法的性能很好,它有快速算法,如采用快速傅立葉變換可以進行高效的運算,因此它在硬件和軟件中都容易

8、實現(xiàn);而且DCT算法是對稱的,所以利用逆DCT算法可以用來解壓縮圖像。為什么采用8x8的圖像塊,其原因是由于計算量和像素之間關系的數(shù)量,許多研究表明,在15或20個像素之后,像素間的相關性開始下降。就是說,一列相似的像素通常會持續(xù)15到20個像素那么長,在此之后,像素就會改變幅度水平(或反向)。模擬圖像經(jīng)采樣后成為離散化的亮度值然后分成一個個宏塊,而一個宏塊有分成8x8大小的塊,可以用一個矩陣來表示這個塊。在這里,N=8,矩陣中元素f(i,j)表示塊中第i行、第j列像素的亮度值。把該矩陣看作一個空間域,顯然,塊中這些亮度值的大小有一定的隨機性,無序性,或者說亮度值的分布沒有什么特征;DCT變換

9、就是來解決這個問題的,把這些隨機的數(shù)據(jù)變的有序,便于對數(shù)據(jù)進行編碼壓縮。3、量化量化過程實際上就是對 DCT 系數(shù)的一個優(yōu)化過程。它是利用了人眼對高頻部分不敏感的特性來實現(xiàn)數(shù)據(jù)的大幅簡化。量化過程實際上是簡單地把頻率領域上每個成份,除以一個對于該成份的常數(shù),且接著四舍五入取最接近的整數(shù)。這是整個過程中的主要有損運算。以這個結果來說,經(jīng)常會把很多高頻率的成份四舍五入而接近0,且剩下很多會變成小的正或負數(shù)。整個量化的目的是減小非“0”系數(shù)的幅度以及增加“0”值系數(shù)的數(shù)目。量化是圖像質(zhì)量下降的最主要原因。因為人眼對亮度信號比對色差信號更敏感,因此使用了兩種量化表:亮度量化值和色差量化值。總體上來說,

10、DCT 變換實際是空間域的低通濾波器。對 Y 分量采用細量化,對 UV 采用粗量化。量化表是控制 JPEG 壓縮比的關鍵,這個步驟除掉了一些高頻量;另一個重要原因是所有圖片的點與點之間會有一個色彩過渡的過程,大量的圖像信息被包含在低頻率中,經(jīng)過量化處理后,在高頻率段,將出現(xiàn)大量連續(xù)的零。二、流程圖基于DCT的圖像壓縮編碼的程序?qū)崿F(xiàn)的流程圖如圖3-1所示。開始輸入圖片分成8*8像素塊,DCT變換輸入量化表,對變換系數(shù)量化對量化系數(shù)進行掃描選擇一幅圖對其進行不同的壓縮比變換反量化反DCT變換顯示所選圖像的信噪比結束圖3-1 程序流程圖三、程序中實現(xiàn)/*/* 學號:姓名: */*/#include

11、<stdio.h>#include <math.h>#define N 8#define PI 3.1415926int f1NN=139,144,149,153,155,155,155,155,144,151,153,156,159,156,156,156,150,155,160,163,158,156,156,156,159,161,162,160,160,159,159,159,159,160,161,162,162,155,155,155,161,161,161,161,160,157,157,157,162,162,161,163,162,157,157,15

12、7,162,162,161,161,163,158,158,158,;int q1NN=/定義色度量化系數(shù)17,18,24,47,99,99,99,99, 18,21,26,66,99,99,99,99, 24,26,56,99,99,99,99,99, 47,66,99,99,99,99,99,99, 99,99,99,99,99,99,99,99, 99,99,99,99,99,99,99,99, 99,99,99,99,99,99,99,99, 99,99,99,99,99,99,99,99,;int q2NN=/定義亮度量化系數(shù)16,11,10,16,24,40,51,61,12,12

13、,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99;void showMat_d(double *matShow);void showMat_i(int *matShow);/顯示函數(shù),輸出為整形數(shù)據(jù)void DCT(int *f,double *F);/經(jīng)過FDCT變換,f為輸入數(shù)據(jù),F(xiàn)為輸出數(shù)據(jù)vo

14、id IDCT(int *f,int *F);/經(jīng)過逆變換,f為輸入數(shù)據(jù),F(xiàn)為輸出數(shù)據(jù)void quant(double *f,int *F);/量化過程,f為傳進的DCT數(shù)據(jù),F(xiàn)為量化后的數(shù)據(jù)void iQuant(int *f,int *F);/逆量化過程,f為量化后的數(shù)據(jù),F(xiàn)為消除了量化的數(shù)據(jù)void main()double FNN=0;/初始化輸出數(shù)組int f_1NN=0;/初始化逆變換的輸出數(shù)組int f2NN=0;/自定義輸入數(shù)組的數(shù)據(jù)int fqNN=0;/定義量化后的數(shù)組。int fq_1NN=0;/定義經(jīng)過逆變化后的數(shù)組int i=0,j=0;/printf("

15、輸入數(shù)據(jù)f(x,y)為:n");showMat_i(int *)f1);/輸出原始數(shù)據(jù)for(i=0;i<N;i+)for(j=0;j<N;j+)f1ij-=128;/減128printf("nDCT之后,數(shù)據(jù)F(u,v)為:n");DCT(int *)f1,(double *)F);/DCT變換showMat_d(double *)F);/輸出DCT數(shù)據(jù)quant(double *)F,(int *)fq);/量化printf("n量化后的DCT為:n");showMat_i(int *)fq);/輸出量化后的DCT數(shù)據(jù)iQuan

16、t(int *)fq,(int *)fq_1);/經(jīng)過逆量化處理printf("n逆量化后的數(shù)為:n");showMat_i(int *)fq_1);printf("nIDCT之后,數(shù)據(jù)f'(x,y)為:n");IDCT(int *)fq_1,(int *)f_1);/IDCT變換for(i=0;i<N;i+)for(j=0;j<N;j+)f_1ij+=128;/加128showMat_i(int *)f_1);/輸出數(shù)據(jù)/void showMat_d(double *matShow)int i=0;int j=0;for(i=0;i

17、<N;i+)for(j=0;j<N;j+)printf("%5.1f ",(*(double*)matShow+i*N+j);printf("n");void showMat_i(int *matShow)int i=0;int j=0;for(i=0;i<N;i+)for(j=0;j<N;j+)printf("%3d ",(*(int*)matShow+i*N+j);printf("n");void quant(double *f,int *F)int i=0;int j=0;double

18、 tempNN=0.0;for (i=0;i<N;i+)for(j=0;j<N;j+)*(double*)temp+i*N+j)=(*(double*)f+i*N+j)/(*(int*)q2+i*N+j);if (*(double*)temp+i*N+j)<0)*(int*)F+i*N+j)=(int)(*(double*)temp+i*N+j)-0.5);/-0.5為四舍五入取整else*(int*)F+i*N+j)=(int)(*(double*)temp+i*N+j)+0.5);/+0.5為四舍五入取整void iQuant(int *f,int *F)int i=0;

19、int j=0;double tempNN=0.0;for (i=0;i<N;i+)for(j=0;j<N;j+)*(double*)temp+i*N+j)=(double)*(int*)f+i*N+j)*(*(int*)q2+i*N+j);if (*(double*)temp+i*N+j)<0)*(int*)F+i*N+j)=(int)(*(double*)temp+i*N+j)-0.5);/-0.5為四舍五入取整else*(int*)F+i*N+j)=(int)(*(double*)temp+i*N+j)+0.5);/+0.5為四舍五入取整void DCT(int *f,

20、double *F)/DCT轉(zhuǎn)換int x,m,n;double dTempNN = 0.0;/中間矩陣double tempNN=0.0;double coffN = 0.0;/變換系數(shù)coff0 = 1/sqrt(N);for (m=1;m<N;m+)coffm=sqrt(2)/sqrt(N);/一維變換,對列進行一維DCT變換。for(n=0;n<N;n+)/每一列遍歷for(m=0;m<N;m+)/每一行遍歷for(x=0;x<N;x+)/每個cos系數(shù)遍歷(*(double*)temp+m*N+n)+=(double)(*(int*)f+x*N+n)*coff

21、m*cos(2*x+1)*PI*m/(2*N);/二維變換,對行進行以為DCT變換for (m=0;m<N;m+)/每一行遍歷for(n=0;n<N;n+)/每一列遍歷for(x=0;x<N;x+)/每個cos系數(shù)遍歷(*(double*)F+m*N+n)+=(*(double*)temp+m*N+x)*coffn*cos(2*x+1)*PI*n/(2*N);void IDCT(int *f,int *F)/逆變換int y,m,x;double dTempNN = 0.0;/中間矩陣double tempNN =0.0;double coffN = 0.0;/變換系數(shù)cof

22、f0 = 1.0/sqrt(N);for (m=1;m<N;m+)coffm=sqrt(2)/sqrt(N);/一維變換for(x=0;x<N;x+)for(y=0;y<N;y+)for(m=0;m<N;m+)(*(double*)temp+x*N+y)+=(*(int*)f+x*N+m)*coffm*cos(2*y+1)*PI*m/(2*N);/二維變換for (y=0;y<N;y+)for(x=0;x<N;x+)for(m=0;m<N;m+)(*(double*)dTemp+x*N+y)+=(*(double*)temp+m*N+y)*coffm*

23、cos(2*x+1)*PI*m/(2*N);if (*(double*)dTemp+x*N+y)<0)(*(int*)F+x*N+y)=(int)(*(double*)dTemp+x*N+y)-0.5);/-0.5為四舍五入取整else(*(int*)F+x*N+y)=(int)(*(double*)dTemp+x*N+y)+0.5);/+0.5為四舍五入取整四、輸出結果亮度量化輸出結果:色度量化結果為: 公司印章管理制度一、目的 公司印章是公司對內(nèi)對外行使權力的標志,也是公司名稱的法律體現(xiàn), 因此,必須對印章進行規(guī)范化、合理化的嚴格管理,以保證公司各項業(yè)務的正常運作,由公司指定專人負責管理。二、印章的種類1、 公章,是按照政府規(guī)定,由主管部門批準刻制的代表公司權力

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論