freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于vc的圖像壓縮編碼技術的研究及算法實現(xiàn)-資料下載頁

2024-11-03 13:03本頁面

【導讀】長期以來,人類獲取到的信息其80%來源于圖像媒體,15%來源于語音。最為重要的載體,也是蘊含信息量最大的媒體。由于未經處理的圖像信息量非常大,大力研究和開發(fā)圖像壓縮編碼技術就非常重要。圖像之所以可以被壓縮,其根本原因就在于圖像數據具有較多的信息冗余。據就具有相當大的冗余度,也就有相當的壓縮潛力。再者,圖像品質的評價取決于人。眼,而人眼由于其視覺特性對圖像的細微差別還是很難分辨的。一定的視覺冗余,也就是說,在對圖像數據進行壓縮時,可以允許一定程度的失真。進行壓縮,對所得到的圖像壓縮比進行比較,最后得出每種壓縮方法的優(yōu)缺點。文首先介紹了圖像壓縮編碼技術的概念、分類、特點、發(fā)展方向及應用等基礎知識,

  

【正文】 但不能壓縮數據,反而會增加圖像文件的大小。極端情況如果圖像中每兩個相鄰點的顏色都不同,用這種算法不但不能壓縮,反而數據量增加一倍。所以現(xiàn)在單純采用行程編碼的壓縮算法用得并不多, PCX文件算是其中的一種。 本章小結 本章 講述了 哈夫曼編碼、香農 費諾編碼和行程編碼這三種編碼的算法原理、編碼步驟及編碼 特點 。 20 第 4 章 圖像壓縮技術編碼 方法設計 哈弗曼編碼 哈弗曼編碼算法實現(xiàn) 資源文件 中主要介紹哈夫曼編碼的算法,首先要從視圖類CDImageProcessView 中的 OnHuffmancoding 函數中得到 0255 各灰度值出現(xiàn)的概率,在下面的算法中要基于這個概率值進行哈夫曼編碼。 首先要對這個概率值進行從小到大的冒泡排序,然后從概率大于 0 處開始編碼,灰度值較小的編為 1,灰度值較大的編 為 0,再將最小的兩個灰度值相加,將加后的值與其他灰度值放在一起重新按從小到大排序,重復以上的步驟直到概率值相加為 1。然后計算該圖像的熵值、平均碼字長度及編碼效率。具體算法如下代碼所示: BOOL CHuffmanCoding::OnInitDialog() { //調用默認的對話框初始化函數 CDialog::OnInitDialog()。 int i。 // 循環(huán)變量 int j。 // 循環(huán)變量 int k。 // 循環(huán)變量 // 圖像灰度出現(xiàn)概率中間結果的數組 double * temp。 // 數組用來存放灰度值和其位置之間的對應關系 int * turn。 // 分配內存 m_strCode = new CString[graygrade]。 // 分配內存 turn = new int[graygrade]。 // 分配內存 temp = new double[graygrade]。 for (i = 0。 i graygrade。 i ++) 21 { //將 grayfreq 的值傳 給 temp temp[i] = grayfreq[i]。 //記錄灰度位置 turn[i] = i。 } // 中間變量 double te。 //用冒泡法對進行灰度值出現(xiàn)的概率排序從小到大 //同時改變灰度值位置的映射關系 for (j = 0。 j graygrade 1。 j ++) { for (i = 0。 i graygrade j 1。 i ++) { //如果前面的值大于后面的值 if (temp[i] temp[i + 1]) { //二者的值互換 te = temp[i]。 temp[i] = temp[i + 1]。 temp[i + 1] = te。 // 將 i和 i+1 灰度的位置值互換 for (k = 0。 k graygrade。 k ++) { if (turn[k] == i) turn[k] = i + 1。 else if (turn[k] == i + 1) turn[k] = i。 } } } } 22 // 從灰度概率大于 0 處開始編碼 for (i = 0。 i graygrade 1。 i ++) { if (temp[i] 0) break。 } for (。 i graygrade 1。 i ++) { // 更新 m_strCode for (k = 0。 k graygrade。 k ++) { // 灰度值是否 i if (turn[k] == i) { // 灰度值較小的碼字加 1 m_strCode[k] = 1 + m_strCode[k]。 } else if (turn[k] == i + 1) { //灰度值較大的碼字加 0 m_strCode[k] = 0 + m_strCode[k]。 } } // 概率最小的兩個概率相加,保存在 temp[i + 1]中 temp[i + 1] = temp[i]+temp[i + 1]。 // 改變映射關系 for (k = 0。 k graygrade。 k ++) { // 將位置為 i的灰度值 i改為灰度值 i+1 if (turn[k] == i) { turn[k] = i + 1。 } } 23 // 重新排序 從 i+ 1 開始 for (j = i + 1。 j graygrade 1。 j ++) { if (temp[j] temp[j + 1]) { te = temp[j]。 // 互換 temp[j] = temp[j + 1]。 temp[j + 1] = te。 // 將 i和 i+1 灰度的位置值互換 for (k = 0。 k graygrade。 k ++) { if (turn[k] == j) turn[k] = j + 1。 else if (turn[k] == j + 1) turn[k] = j。 } } else break。 // 退出循環(huán) } } // 計算圖像熵 for (i = 0。 i graygrade。 i ++) { if (grayfreq[i] 0) { // 計算圖像熵 m_shang = grayfreq[i] * log(grayfreq[i]) / log()。 } } // 計算平均碼字長度 24 for (i = 0。 i graygrade。 i ++) { m_length += grayfreq[i] * m_strCode[i].GetLength()。 //累加 } // 計算編碼效率 m_effection = m_shang / m_length。 // 保存變動 UpdateData(FALSE)。 // 字符串變量,列表項目的顯示 CString listname。 // 控件 CodingList 的 ITEM LV_ITEM codingItem。 // 保存控件 ListCtrl中添加的 ITEM 編號 int nItem2View。 // 設置 CListCtrl控件樣式 (LVS_TYPEMASK, LVS_REPORT)。 // 給 List 控件添加 Header (0, 像素灰度 , LVCFMT_LEFT, 70, 0)。 (1, 灰度概率 , LVCFMT_LEFT, 70, 0)。 (2, 編碼碼字 , LVCFMT_LEFT, 90, 1)。 (3, 碼字長度 , LVCFMT_LEFT, 60, 2)。 // 設置樣式為文本 = LVIF_TEXT。 // 添加顯示 for (i = 0。 i graygrade。 i ++) { // 第一列顯示 = ()。 (%u,i)。 = 0。 //顯示像素灰度 25 = (LPTSTR)(LPCTSTR)listname。 nItem2View = (amp。codingItem)。 = nItem2View。 // 第二列顯示 = 1。 (%f,grayfreq[i])。 = (LPTSTR)(LPCTSTR)listname。 (amp。codingItem)。 // 第三列顯示 = 2。 = (LPTSTR)(LPCTSTR)m_strCode[i]。 (amp。codingItem)。 // 第四列顯示 = 3。 (%u,m_strCode[i].GetLength())。 = (LPTSTR)(LPCTSTR)listname。 (amp。codingItem)。 } delete turn。 // 內存釋放 delete temp。 return TRUE。 // 返回 TRUE } 視圖類 On Huffman coding()函數 此函數是用來統(tǒng)計各灰度值出現(xiàn)的概率,并以對話框的形式顯示通過算法計算出的結論值。 首先是通過 CDib 類中的 GetBits()函數來獲取圖像像素的起始位置,因為本程序只支持 256 色的位圖圖像,所以要進行判斷 (如果不是 256 色的位圖圖像則彈出對話框提示“只支持 256 色位圖圖像” )。然后通過 CDib 類中的 GetWidth()和 GetHeight()函數返回圖像的寬度和高度,用于計算圖像的像素總和及控制循環(huán)邊界。用兩個 for 的嵌套循環(huán)對圖像的進行逐 行掃描,以統(tǒng)計出每個灰度值出現(xiàn)的次數,再除以像素總和 26 就可以得到每個灰度值的概率,此概率要參與到哈夫曼編碼算法中。最后要顯示出哈夫曼編碼的結果,本程序是通過對話框來顯示的。 void CDImageProcessView::OnHuffmancoding() { // 獲取文檔 CDImageProcessDoc* pDoc = GetDocument()。 //指向源圖像的指針 unsigned char* lpSrc。 // 指向 DIB 的指針 LPSTR lpDIB。 // 指向 DIB 象素指針 LPSTR lpDIBBits。 //圖像灰度等級數 int graygrade。 //鎖定 DIB lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDocGetHObject())。 //找到 DIB 圖像象素起始位置 lpDIBBits = pDoc(lpDIB)。 // 判斷是否是 8bpp 位圖 if (pDoc(lpDIB) != 256) { // 提示用戶 MessageBox(目前只支持 256 色位圖! , 系統(tǒng)提示 , MB_ICONINFORMATION | MB_OK)。 // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDocGetHObject())。 return。 // 返回 } //灰度等級數為 256 graygrade=pDoc(lpDIB)。 //各灰度等級出現(xiàn)的概率 double * grayfreq。 27 //圖像寬度 int width。 //圖像高度 int height。 width=pDoc(lpDIB)。 height=pDoc(lpDIB)。 //更改光標形狀 BeginWaitCursor()。 //分配內存 grayfreq = new double[graygrade]。 //像素數目 int graySum。 int i。 int j。 graySum = width * height。 // 計算圖象象素總數 for (i = 0。 i graygrade。 i ++) { // 賦零值 grayfreq[i] = 。 } //計算各個灰度值的計數 for (i = 0。 i height。 i ++) { for
點擊復制文檔內容
試題試卷相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1