基于DCT變換的圖像壓縮解壓縮算法matlab仿真

目錄

1.算法運行效果圖預覽

2.算法運行軟件版本

3.部分核心程序

4.算法理論概述

4.1、DCT變換原理

4.2、基于DCT的圖像壓縮

4.3、基于DCT的圖像解壓縮

5.算法完整程序工程


1.算法運行效果圖預覽

2.算法運行軟件版本

MATLAB2022a

3.部分核心程序

....................................................................
%調用8x8矩陣的量化等級  
load Q10.mat% 對R、G、B通道應用壓縮函數func_ys,得到壓縮后的圖像Rys、Gys、Bys  
Rys  = func_ys(R1,Coff_dct,Q_dct,Bsize);
Gys  = func_ys(G1,Coff_dct,Q_dct,Bsize);
Bys  = func_ys(B1,Coff_dct,Q_dct,Bsize);% 將壓縮后的通道數據合并成一個新的圖像I1ys  
I1ys(:,:,1) = Rys;
I1ys(:,:,2) = Gys;
I1ys(:,:,3) = Bys;
imwrite(I1ys,'TMPS\Iys.jpg');% 將圖像I1ys寫入到文件'TMPS\Iys.jpg'中  % 對壓縮后的圖像應用解壓縮函數func_deys,得到解壓縮后的圖像Rdeys、Gdeys、Bdeys  
Rdeys        = func_deys(Rys,Coff_dct,Q_dct,Bsize);
Gdeys        = func_deys(Gys,Coff_dct,Q_dct,Bsize);
Bdeys        = func_deys(Bys,Coff_dct,Q_dct,Bsize);
% 將解壓縮后的通道數據合并成一個新的圖像I2deys,并轉換為uint8類型  
I2deys(:,:,1) = uint8(Rdeys);
I2deys(:,:,2) = uint8(Gdeys);
I2deys(:,:,3) = uint8(Bdeys);
imwrite(I2deys,'TMPS\Ideys.jpg');% 將圖像I2deys寫入到文件'TMPS\Ideys.jpg'中  % 獲取原始圖像文件和壓縮后的圖像文件的大小(字節) %壓縮率
ys_rate = SIZE1/SIZE2;% 顯示三個圖像:壓縮后的圖像、解壓后的圖像、原始圖像  
figure(1)
subplot(131)
imshow(I1ys);
title('壓縮圖像')
subplot(132)
imshow(I2deys);
title('解壓圖像')
subplot(133)
imshow(I0);
title('原始圖像')I00 = imread('TMPS\Ideys.jpg');
err = (double(I0) - double(I00)) .^ 2;
mse1= sum(err(:)) / (64*64); 
%PSNR 
Max_pixel = 255;
PSNR      = 20*log10((Max_pixel^2)./sqrt(mse1));save R1.mat ys_rate PSNR
00084

4.算法理論概述

? ? ? ?基于DCT(離散余弦變換)的圖像壓縮與解壓縮算法。我們深入探討了DCT變換的原理、其在圖像編碼中的應用,并給出了相應的數學公式和算法實現細節。隨著數字技術的快速發展,圖像數據在日常生活中呈現爆炸性增長。因此,如何有效地壓縮圖像數據,同時確保良好的圖像質量,成為了一個重要的研究課題。DCT變換由于其良好的能量集中特性和與人類視覺系統的匹配度,被廣泛應用于圖像壓縮標準中,如JPEG。

4.1、DCT變換原理

? ? ? 離散余弦變換(DCT)是傅里葉變換的一種變種。它將信號從時域變換到頻域,使得信號的能量大部分集中在幾個頻率分量上。對于圖像而言,DCT可以有效地將圖像的能量集中在左上角的低頻部分。

一維DCT變換公式如下:

? ? ? 二維DCT變換(通常用于圖像處理)可以通過兩次一維DCT變換實現,首先對行進行變換,再對列進行變換。

? ? ? ? 可以發現,二維DCT變換其實是在一維DCT變換的基礎上,再做一次一維DCT變換。二維DCT也可以寫成矩陣相乘的形式:

? ? ? ? ?二維DCT變換的復雜度達到O(n^4),所以進行DCT變換的矩陣不宜過大。在實際處理圖片的過程中,需要先把矩陣分塊,一般分為8x8或16x16大小,這樣DCT變換不至于耗費過多的時間。

4.2、基于DCT的圖像壓縮

基于DCT的圖像壓縮主要步驟如下:

分塊:將原始圖像分為8x8或16x16的小塊。
DCT變換:對每個小塊進行二維DCT變換。
量化:使用預定的量化表對DCT系數進行量化,這一步驟是有損的,會丟失部分信息。
編碼:采用Zig-Zag掃描將量化后的系數排列為一維序列,并使用霍夫曼編碼進行進一步壓縮。
通過以上的步驟,我們可以實現圖像的壓縮。需要注意的是,量化步驟是有損的,因此解壓后的圖像與原始圖像會存在一定的差異。

4.3、基于DCT的圖像解壓縮

解壓縮是壓縮的逆過程,主要包括以下步驟:

解碼:使用霍夫曼解碼對編碼后的數據流進行解碼。
反量化:使用與壓縮時相同的量化表對解碼后的數據進行反量化。
反DCT變換:對反量化后的數據進行二維反DCT變換。
重構:將反DCT變換后的塊組合成完整的圖像。

5.算法完整程序工程

OOOOO

OOO

O

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165034.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165034.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165034.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

動態loading

項目中需要用到動圖loading的地方可以下載 https://www.intogif.com/loading/ 高級點的還有css動畫;692 Loaders: CSS & Tailwind 692 Loaders: CSS & Tailwind

【Python】np.unique() 介紹與使用

簡述 numpy.unique:用于去除數組中重復元素,并從小到大排序(找到唯一元素并排序)。 def unique(ar, return_indexFalse, return_inverseFalse,return_countsFalse, axisNone):ar: 這是輸入的數組或類數組對象。return_index: 如…

【數字信號處理】傅里葉變換的離散性與周期性

傅里葉變換的離散性與周期性 2023年11月21日 #elecEngeneer 文章目錄 傅里葉變換的離散性與周期性1. 符號說明2. 具體分析3. 序列的序號表示的DFT下鏈 1. 符號說明 t : 連續時間(時域)變量 ω : 頻域變量,aka角頻率 g : 時域函數 G : 頻域函數 n : 時域采樣序列序號…

MAV3D:從文本描述中生成三維動態場景

Singer U, Sheynin S, Polyak A, et al. Text-to-4d dynamic scene generation[J]. arXiv preprint arXiv:2301.11280, 2023. MAV3D 是 Meta AI 研究者們提出的一種從文本描述生成三維動態場景的方法。從所提供的文本生成的動態視頻輸出可以從任何攝像機位置和角度查看&#xf…

Rust語言入門教程(一) - 簡介及Cargo使用

Rust編程入門 為什么學習Rust 我本人是一個DevOps工程師,并不是專職的開發人員,但需要了解各種各樣的語言的基本知識和特性,以便在不同的項目中幫助開發人員設計軟件架構,部署流程以及進行錯誤排查和調試。但是對任何新生的優秀…

springboot 外部化配置

背景:修改jar包中的配置比較麻煩 項目部署的時候放一個配置文件在jar包外 配置文件優先級: 1.jar包內的application.properties/yaml 2.jar包內的application-{profile}.properties/yaml 3.jar包外的application.properties/yaml 4.jar包外的application-{profile}.properties…

【算法】緩存淘汰算法

目錄 1.概述2.代碼實現2.1.FIFO2.2.LRU2.3.LFU2.4.Clock2.5.Random 3.應用 1.概述 緩存淘汰策略是指在緩存容量有限的情況下,當緩存空間不足時決定哪些緩存項應當被移除的策略。緩存淘汰策略的目標是盡可能地保持緩存命中率高,同時合理地利用有限的緩存…

(保姆級教程)Mysql中事務的概念,什么是事務,如何使用事務,以及事務的隔離級別,什么是臟讀、幻讀,代碼演示

繼續講解 Mysql 數據庫中最重要的一個概念:事務 文章目錄 事務1.1 什么是事務1.2 執行原理1.3 如何操作事務1.4 事務的特點(ACID原則)1.5 事務并發1.6 事務隔離級別1.6.1 事務并發問題操作演示1.6.2 臟讀演示1.6.3 不可重復讀演示1.6.4 幻讀演…

二叉樹的順序結構及實現

目錄 1 二叉樹的順序結構2. 堆的概念及結構3 .堆的實現(小堆) 1 二叉樹的順序結構 普通的二叉樹是不適合用數組來存儲的,因為可能會存在大量的空間浪費。而完全二叉樹更適合使用順序結構存儲。現實中我們通常把堆(一種二叉樹)使用順序結構的數組來存儲,…

【Pytorch】Visualization of Feature Maps(3)

學習參考來自: Image Style Transform–關于圖像風格遷移的介紹github:https://github.com/wmn7/ML_Practice/tree/master/2019_06_03 文章目錄 風格遷移 風格遷移 風格遷移出處: 《A Neural Algorithm of Artistic Style》(ar…

瀏覽器沒收到返回,后端也沒報錯,php的json_encode問題bug

今天網站遇到個問題,后端返回異常,但是瀏覽器狀態碼200,但是看不到結果。經過排查發現,我們在返回結果的時候使用了json_encode返回給前端,結果里面的字符編碼異常,導致json_encode異常,但是php…

前綴和——724. 尋找數組的中心下標

文章目錄 🍓1. 題目🫒2. 算法原理🦄解法一:暴力枚舉🦄解法二:前綴和 🥔3. 代碼實現 🍓1. 題目 題目鏈接:724. 尋找數組的中心下標 - 力扣(LeetCode&#xff0…

【限時免費】20天拿下華為OD筆試之【前綴和】2023B-數字游戲【歐弟算法】全網注釋最詳細分類最全的華為OD真題題解

文章目錄 題目描述與示例題目描述輸入描述輸出描述示例一輸入輸出 示例二輸入輸出說明 解題思路前綴和簡單的數學推導哈希集合的使用 代碼PythonJavaC時空復雜度 華為OD算法/大廠面試高頻題算法練習沖刺訓練 題目描述與示例 題目描述 小明玩一個游戲。 系統發1n張牌&#xff…

某60區塊鏈安全之未初始化的存儲指針實戰一學習記錄

區塊鏈安全 文章目錄 區塊鏈安全未初始化的存儲指針實戰一實驗目的實驗環境實驗工具實驗原理實驗過程 未初始化的存儲指針實戰一 實驗目的 學會使用python3的web3模塊 學會分析以太坊智能合約未初始化的存儲指針漏洞 找到合約漏洞進行分析并形成利用 實驗環境 Ubuntu18.04操…

深度學習之八(生成對抗網絡--Generative Adversarial Networks,GANs)

概念 生成對抗網絡(Generative Adversarial Networks, GANs)是一種深度學習模型,由 Ian Goodfellow 等人于2014年提出。GAN 的目標是通過訓練兩個神經網絡(生成器和判別器),使得生成器能夠生成與真實數據相似的樣本,而判別器能夠區分真實樣本和生成樣本。這兩個網絡相…

多元邏輯回歸模型的概念、模型檢驗以及應用

多元邏輯回歸是邏輯回歸的一種擴展,用于處理多類別分類問題。在二元邏輯回歸中,我們通過一個邏輯函數(也稱為S形函數)將輸入特征映射到一個概率值,用于預測兩個類別中一個的概率。而在多元邏輯回歸中,我們面…

沃趣班11月月考題目解析

沃趣班11月月考題目解析 1.在oracle中創建用戶時,若未設置default tablespace關鍵字,則oracle將哪個表空間分配給用戶作為默認表空間 答案:D.user SQL> create user mytest identified by 123456; SQL> grant connect to mytest; SQL…

【開源】基于Vue.js的海南旅游景點推薦系統的設計和實現

項目編號: S 023 ,文末獲取源碼。 \color{red}{項目編號:S023,文末獲取源碼。} 項目編號:S023,文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 用戶端2.2 管理員端 三、系統展示四…

CSS特效017:球體漲水的效果

CSS常用示例100專欄目錄 本專欄記錄的是經常使用的CSS示例與技巧,主要包含CSS布局,CSS特效,CSS花邊信息三部分內容。其中CSS布局主要是列出一些常用的CSS布局信息點,CSS特效主要是一些動畫示例,CSS花邊是描述了一些CSS…

前端錯誤處理與調試

** javascript錯誤處理 ** 由于javascript本身是動態語言,而且沒有固定的開發工具,因此他普遍認為是最難以調試的語言,在ECMAScript3新增了try-catch和throw以及一些錯誤類型,讓開發人員能適當的處理錯誤,緊接著web瀏…