日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab图片压缩

發(fā)布時(shí)間:2023/12/18 循环神经网络 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab图片压缩 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

DCT變換

DCT又稱離散余弦變換,是一種塊變換方式,只使用余弦函數(shù)來表達(dá)信號(hào),與傅里葉變換緊密相關(guān)。常用于圖像數(shù)據(jù)的壓縮,通過將圖像分成大小相等(一般為8*8)的塊,利用DCT對其進(jìn)行變換,得到更加簡潔的數(shù)據(jù)。因?yàn)閳D像像素間存在較大的空間相關(guān)性,DCT可以大大減小這些相關(guān)性,使圖像能量集中在左上角區(qū)域,從而利于數(shù)據(jù)壓縮。變換后得到的數(shù)據(jù)稱為DCT系數(shù)。這一過程是無損的。

二維DCT變換

這里來看看二維DCT變換的公式:

c(u)和c(v)為添加的系數(shù),主要作用為使DCT變換矩陣為正交矩陣。F(u,v)即為DCT變換系數(shù),可以通過矩陣形式來表示:

A即為正交矩陣,通過F和A逆變換即可恢復(fù)圖像數(shù)據(jù)。

下面通過一個(gè)例子來說明:

clear; clc; I = [12,23,53,16;42,16,68,45;34,62,73,26;72,15,34,28]; %數(shù)據(jù)塊 A = zeros(4); %變換矩陣A,也可以通過函數(shù)dctmtx(n)求得 for i = 0:3for j = 0:3if i == 0a = sqrt(1/4);elsea = sqrt(2/4);endA(i+1,j+1) = a*cos((j+0.5)*pi*i/4)end end D = A*I*A'; %DCT變換 D1 = dct2(I); %matlab DCT函數(shù)進(jìn)行DCT變換 D2 = A'*D*A; %DCT逆變換

由結(jié)果可以看出,D,D1方式得到的DCT系數(shù)相同,說明矩陣形式的DCT變換公式是正確的,D2的數(shù)據(jù)與原數(shù)據(jù)I相同,實(shí)現(xiàn)了數(shù)據(jù)恢復(fù)。

另外通過運(yùn)行函數(shù)dctmtx(4)可以發(fā)現(xiàn)得到的變換矩陣與A完全相同。

Matlab 函數(shù)實(shí)現(xiàn)

matlab實(shí)現(xiàn)離散余弦變換有兩種方法:

  • 一種為函數(shù)dct2( ), 使用函數(shù)dct2,該函數(shù)用一個(gè)基于FFT的算法來提高當(dāng)輸入較大的方陣時(shí)的計(jì)算速度。
  • 另一種為函數(shù)dctmtx( ), 使用由dctmtx函數(shù)返回的DCT變換矩陣,這種方法較適合于較小的輸入方陣(例如8×8或16×16)。

  • 1. 函數(shù):dct2( )

    實(shí)現(xiàn)圖像的二維離散余弦變換。調(diào)用格式為:?
    B = dct2(A)?
    B = dct2(A,[M N])?
    B = dct2(A,M,N)?
    式中A表示要變換的圖像,M和N是可選參數(shù),表示填充后的圖像矩陣大小,B表示變換后得到的圖像矩陣。其逆變換函數(shù)為idct2( );?
    代碼如下:

    I = imread('1_1.jpg');%輸入灰度圖像 D = dct2(I); %DCT變換 D1 = idct2(D); %逆變換 subplot(1,2,1);imshow(I); subplot(1,2,2);imshow(uint8(D1));

    在這里可以通過函數(shù)colormap查看變換系數(shù)D。利用不同灰度值,可以發(fā)現(xiàn)D中主要數(shù)據(jù)都分布在左上角。

    imshow(log(abs(D)),[]); colormap(gray(8));colorbar;

    2. 函數(shù):dctmtx( )

    D = dctmtx(N)?
    式中D是返回N×N的DCT變換矩陣,如果矩陣A是N×N方陣,則A的DCT變換可用D×A×D’來計(jì)算。這在有時(shí)比dct2計(jì)算快,特別是對于A很大的情況。上面有提到過。

    對于圖像的DCT變換,這里還需用到一個(gè)函數(shù)blkproc( ),其功能為對圖像分塊進(jìn)行DCT變換。?
    blkproc( )定義如下:?
    B = blkproc(A,[M N],Fun) ,A為輸入圖像,M*N為塊大小,Fun為處理函數(shù)?
    常用的方式為:?
    B = blkproc(A,[8,8],’P1*x*P2’,T,T’); T為變換矩陣,P1和P2為參數(shù),代表T*x*T’ 。

    下面為應(yīng)用例子:

    I = imread('1_1.jpg'); %輸入灰度圖像 I = im2double(I); D = dctmtx(8); C = blkproc(I,[8,8],'P1*x*P2',D,D'); %D'為D的轉(zhuǎn)置 mask1=[1 1 1 1 1 0 0 0 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]; mask2=[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]; mask3=[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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];X = blkproc(C,[8,8],'P1.*x',mask1); %保留15個(gè)系數(shù) I1 = blkproc(X,[8,8],'P1*x*P2',D',D); %重構(gòu)圖像 X2 = blkproc(C,[8,8],'P1.*x',mask2); %保留10個(gè)系數(shù) I2 = blkproc(X2,[8,8],'P1*x*P2',D',D); %重構(gòu)圖像 X3 = blkproc(C,[8,8],'P1.*x',mask3); %保留3個(gè)系數(shù) I3 = blkproc(X3,[8,8],'P1*x*P2',D',D); %重構(gòu)圖像 subplot(2,4,1);imshow(I); subplot(2,4,2);imshow(I1); subplot(2,4,3);imshow(I2); subplot(2,4,4);imshow(I3);

    上面代碼中,通過求得圖像DCT系數(shù),利用mask等矩陣對其進(jìn)行量化,保留左上角主要的系數(shù)值,對于右下角的值由于其為非常小的高頻系數(shù),量化去除后對于圖像的質(zhì)量影響不大,可以利用這一性質(zhì)對圖像進(jìn)行壓縮處理。

    保留系數(shù)越多則圖像壓縮質(zhì)量越好,下面比較幾幅圖像質(zhì)量,從左到右分別為原圖,mask1,mask2,mask3;

    可以看到系數(shù)保留越少,則圖像質(zhì)量越差。

    總結(jié)

    以上是生活随笔為你收集整理的matlab图片压缩的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。