1. 怎樣在matlab中進行圖像壓縮,並保留dct系數
來隔壁,我手把手教你A=im2double(imread('Barbara256.bmp'));D=dctmtx(size(A,1));dct=D*A*D';figure,imshow(dct);hist(dct)
2. 數字圖像壓縮技術
3. 怎麼用matlab把壓縮成tiff
1.用matlab實現圖像壓縮時,如何將圖片模擬
圖像壓縮是當今信息時代迫切需求的一門圖像處理技術,它極大的減少了圖像的數據量,為圖像的存儲,傳輸提供了方便。
小波變換,是一種廣泛用於圖像壓縮的方法。它能讓圖像按不同的解析度分析。
根據Mallat演算法的思想,圖像能分解成一個輪廓信號(低頻子圖)和水平,垂直,對角線三個方向上的細節信號(高頻子圖)。而輪廓信號又可以進一步分解。
而圖像的主要能量部分是低頻部分,而且人眼視覺系統對低頻部分更為敏感,所以可以對低頻部分採用較低壓縮比;對高頻部分採用較大壓縮比來進行壓縮。 本文提出的是一種結合小波變換,DCT變換和矢量量化的壓縮方法。
根據人眼的視覺特性,首先對圖像進行小波分解,然後,對低頻分量進行壓縮比不大的DCT變換;對不同方向不同解析度的高頻分量進行不同碼字大小的矢量量化編碼,然後對反變換和解碼後的系數進行小波重構。矢量量化過程中的碼書設計採用的是LBG演算法。
這樣,根據對圖像質量的不同要求,我們可以改變小波分解的層數,來得到不同壓縮比的圖像。本篇論文只對小波分解一層和兩層後壓縮進行了模擬和分析,表明該方案結合了各種壓縮方法的優點,在滿足圖像質量的同時能得到較大的壓縮比。
目前,在包裝裝潢設計中常用的圖形處理軟體有Pho-toshop,CorelDraw,AutoCAD等。但是這些軟體中很少涉及到對圖像進行壓縮處理,以滿足圖像進行傳輸和儲存的需要。
基於這一點考慮,在此嘗試著用MATLAB編程來處理包裝裝潢圖像的壓縮,實現包裝與計算機的緊密結合。 1 MATLAB MATLAB是MathWorks公司推出的一套高性能的數值計算和可視化軟體,它集數值分析、矩陣運算、信號處理和圖像顯示於一體,它附帶的小波分析工具箱功能強大,可以完成小波分析的絕大部分工作。
MATLAB工具箱的出現避免了程序設計中的重復性勞動,縮短了開發周期,降低了成本,因而受到工科院校師生和研究人員的青睞。 在介紹利用MATLAB小波工具壓縮圖像的文獻中,總是尺蔽叢將真彩色RGB圖像轉換為灰度級索引圖像進行處理.經過這種處理以後,圖像的存儲數據能得到一定的壓縮,但由壓縮後的數據難以恢復成理想的彩色圖像。
文中用MATLAB中有關函數處理圖像壓縮,而且由壓縮後的數據可以還原出圖像.實驗結果表明,還原出的圖像效果是理想的。文中主要以lena圖像的處理為例,對它進行二進小波多層分解後,將低頻和高頻近似的系數矩陣作相應的處理,來研究陵櫻用MATLAB中的小波工具箱壓縮圖並慶像的方法。
2 圖像壓縮方法 在實際應用中,首先需要從圖像文件中讀取圖像數據.MATLAB使用imreed()函數完這一任務.例如,在電腦D盤中有一彩色圖像文件picl.jps,則可由下述語句讀取: X=imread(′D:\picl.′); MATLAB圖像處理工具箱支持4種基本圖像類型:索引圖像、灰度圖像、二進制圖像和RGB圖像.MATLAB直接從圖像文件中讀取的圖像為RGB圖像.它存儲在三維數組中。這個三維數組有3個面,依次對應子紅(Red)、綠(Green)、藍(Blue)3種顏色,而面中的數據則分別是這3種顏色的強度值,面中的元素對應於圖像中的像素點。
索引圖像數據包括圖像矩陣X與顏色圖數組map,其中顏色圖map是按圖像中顏色值進行排序後的數組。對於每個像素,圖像矩陣X包含一個值,這個值就是顏色圖數組map中的索引。
顏色圖map為m*3雙精度矩陣,各行分別指定紅、綠、藍(R、G、B)單色值,map=〔RGB〕,R、C、B為值域為〔0,1〕的實數值,m為索引圖像包含的像素個數.然後可根據情況採用不同的小波函數,進行索引圖像的分解壓縮。這里對上面產生的索引圖像X用dbl小波進行2層分解。
〔c,l〕=wavedec2(X,2,′dbl′)。 在這里,一個索引圖像作小波分解後,可得到一系列不同解析度的子圖像,不同解析度的子圖像對應的頻率是不相同的.高解析度(即高頻細節)子圖像上大部分點的數值接近於0,越是高頻這種現象越明顯.對一個圖像來說,表現一個圖像最主要的部分是低頻(即近似)部分。
多層小波分解的所有成分系數均保存在向量c中,低頻近似與高頻細節的系數需從向量C中提取。MATLAB分別使用appcoet2()和detcoef2()函數來完成這一工作。
這種方法是對低頻和高頻部分進行處理,因而提取低頻和高頻近似系數。 cAl=appcoef2(c,1,′dbl,′1);cH1=detcoef2(′h′,c,1,1); cDl=detcoef2(′d′,c,l,1);cVl=detcoef2(′v′,c,l,1)。
matlab實現離散餘弦變換壓縮(JPEG壓縮原理) JPEG圖像壓縮演算法: 輸入圖像被分成8*8或16*16的小塊,然後對每一小塊進行二維DCT(離散餘弦變換)變換,變換後的系數量化、編碼並傳輸; JPEG文件解碼量化了的DCT系數,對每一塊計算二維逆DCT變換,最後把結果塊拼接成一個完整的圖像。在DCT變換後舍棄那些不嚴重影響圖像重構的接近0的系數。
DCT變換的特點是變換後圖像大部分能量集中在左上角,因為左上放映原圖像低頻部分數據,右下反映原圖像高頻部分數據。而圖像的能量通常集中在低頻部分。
實常式序: function Jpeg I=imread('D:\MATLAB7\toolbox\images\imdemos\cameraman.tif'); %該圖片在安裝matlab的目錄中找,原圖為灰度圖象 。
2.使用MATLAB圖像壓縮怎麼做
I = imread('cameraman.tif'); % 輸入圖像
I = im2double(I); % 數據類型轉換
T = dctmtx(8); % 計算二維離散DCT矩陣
dct = @(x)T * x * T'; % 設置函數句柄
B = blkproc(I,[8 8],dct); % 圖像塊處理
mask = [1 1 1 1 0 0 0 0 % 掩膜
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
B2 = blkproc(B,[8 8],@(x)mask.* x); % 圖像塊處理
invdct = @(x)T' * x * T; % 設置函數句柄
I2 = blkproc(B2,[8 8],invdct); % 圖像塊處理
imshow(I), figure, imshow(I2) % 顯示原始圖像和壓縮重構圖像
3.用matlab把11張tif圖片做成一個連續動畫
使用如下代碼方式可以達到你想要的效果。
clear;
clc;
for i=2:50
c=strcat('a',num2str(i));%這里可以根據自己圖片名字兒作相應的修改
c=strcat(c,'.bmp');
I=imread(c);
% I=rgb2gray(I)
figure(1);
imshow(I);
end
圖片的保存方式如:a21.bmp,這樣可以實現你的汽車動畫。如果想要使用你的汽車圖片做的話,請把汽車圖片發給我,我幫你看看。
4. MATLAB編寫基於離散正弦變換(DCT)的圖像壓縮程序
I=imread('cameraman.tif')
I=im2double(I) %轉換圖像矩陣為雙精度型。
T=dctmtx(8) %產生二維DCT變換矩陣
%計算二維DCT,矩陣T及其轉置是DCT函數P1*X*P2的參數
B=blkproc(I,[8,8],'P1*x*P2',T,T') %二值掩模,用來壓縮DCT系數,只留下DCT系數中左上角的10個
mask=[1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 ]
B2=blkproc(B,[8 8],'P1.*x',mask) %只保留DCT變換的10個系數
I2=blkproc(B2,[8 8],'P1*x*P2',T',T) %重構圖像
subplot(1,2,1)
imshow(I)
title('原始圖像');
subplot(1,2,2)
imshow(I2);
title('壓縮圖像');
我這個程序也是改了後的,不過我運行過了,圖片壓縮效果都能出來,就是壓縮比沒有變小,我也不知道為什麼,如果有人給決絕了麻煩通知一下,我郵箱[email protected]
5. 數字圖像處理及算術編碼(或DCT壓縮編碼)模擬實現
這些都是很簡單的功能,為什麼不自己編程試試呢?
風之風信子會幫你解決這一次的問題,誰幫你引導以後的路呢?
%Date: 2011年9月26日20:25:53
%Function: 3*3均值濾波平滑
%Written by 風之風信子
clc;
clear;
clear all;
I=imread('peppers.png');
%這里改成你的路徑,
%切記圖像不能放在漢字文件夾。
%路徑例子:d:\matlab\moon_light_shadow.jpg
J=rgb2gray(I);
%彩色變黑白
imshow(J);
h=(1/9)*[1 1 1;1 1 1;1 1 1];
I2=imfilter(J,h);
%濾波(就是求平均的過程)
figure,imshow(I2);
%%%%直方圖均衡化 matlab實現:
clc;
clear all;
I = imread('d:\Image\hill_histogram.jpg');
I=rgb2gray(I);
J = histeq(I);
subplot(221);imshow(I);
subplot(222); imshow(J);
subplot(223); imhist(I,64)
subplot(224); imhist(J,64)
%%%%DCT編碼 matlab實現:
R=imread('d:\Image\car.jpg'); %裝入原始圖像
I=rgb2gray(R); %轉換成灰度圖像
J=dct2(I); %
colormap(jet(256));
J(abs(J)<100)=0; %將DCT變換值小於10的元素設為0
K=idct2(J);
figure; subplot(121);imshow(I,[0,255]);
title(' original'); %顯示原圖像
subplot(122);imshow(K,[0,255]);
title('IDCT ');%顯示反變