基於方塊編碼的影像壓縮matlab模擬,帶GUI介面

简简单单做算法發表於2024-12-06

1.演算法執行效果圖預覽

(完整程式執行後無水印)

下圖是隨著方塊大小的變化,影像的壓縮率以及對應的影像質量指標PSNR的變化趨勢曲線。

2.演算法執行軟體版本

matlab2022a

3.部分核心程式

(完整版程式碼包含詳細中文註釋和操作步驟影片)

figure;
subplot(121);
plot(sets,tr,'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0])
xlabel('方框大小');
ylabel('壓縮率');
subplot(122);
plot(sets,PSNR,'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0])
 
xlabel('方框大小');
ylabel('壓縮後影像PSNR');
 
 
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
[tr1,PSNR1]=code2(2);
 
disp(['壓縮率',num2str(tr1)])
disp(['PSNR',num2str(PSNR1)])
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
[tr1,PSNR1]=code2(4);
 
disp(['壓縮率',num2str(tr1)])
disp(['PSNR',num2str(PSNR1)])
% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
global tr
global PSNR
global tr2
global PSNR2
[tr1,PSNR1]=code2(8);
 
disp(['壓縮率',num2str(tr1)])
disp(['PSNR',num2str(PSNR1)])
 
 
 
sets = [2,4,8,16,32,64,128,256];
 
for ij = 1:length(sets)
    [tr2(ij),PSNR2(ij)] = code(sets(ij));
end
 
figure;
subplot(121);
plot(sets,tr2,'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0])
 
xlabel('方框大小');
ylabel('壓縮率');
 
subplot(122);
plot(sets,PSNR2,'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0])
 
xlabel('方框大小');
ylabel('壓縮後影像PSNR');
009_030m

  

4.演算法理論概述

隨著資訊科技的飛速發展,影像資料在各個領域中的應用越來越廣泛。然而,影像資料通常具有較大的資料量,這給儲存、傳輸和處理帶來了很大的挑戰。為了解決這個問題,影像壓縮技術應運而生。影像壓縮的目的是在不損失影像質量的前提下,儘可能地減少影像資料的儲存空間和傳輸頻寬。方塊編碼是一種基於區域劃分的影像壓縮方法,它將影像劃分為若干個大小相同的方塊,然後對每個方塊進行編碼。方塊編碼具有簡單、高效、易於實現等優點,在影像壓縮領域得到了廣泛的應用。

(一)方塊的劃分

方塊編碼將影像劃分為若干個大小相同的方塊,每個方塊通常由若干個畫素組成。方塊的大小可以根據影像的特點和壓縮要求進行選擇,一般為 4x4、8x8 或 16x16 等。

(二)灰度值的量化

在方塊編碼中,每個畫素的灰度值通常被量化為有限個等級。量化的目的是減少灰度值的取值範圍,從而降低編碼的複雜度。量化的方法可以採用均勻量化或非均勻量化。

(三)編碼單元的定義

方塊編碼中的編碼單元是指一個方塊及其對應的量化後的灰度值。編碼單元通常用一個整數來表示,這個整數可以透過對編碼單元進行編碼得到。

4.1 編碼單元的表示

為了方便編碼,我們可以將編碼單元表示為一個一維陣列。具體方法是將編碼單元中的畫素按照一定的順序排列成一個一維陣列,然後用這個一維陣列來表示編碼單元。

4.2編碼單元的編碼

方塊編碼的核心是對編碼單元進行編碼。編碼的目的是將編碼單元表示為一個儘可能短的二進位制程式碼。編碼的方法可以採用哈夫曼編碼、算術編碼等。

相關文章