⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compress_jpega.m

📁 Matlab source code related to basic image types. which is useful for the developers
💻 M
字号:
% Andrew Puryear% 362 Project - compress_jpega%   Matlab file takes images and returns COLA-JPEG files. Allows for variable compression.function [ imw, imsize] = compress_jpega( X , halfMax)% discreatize to 256 values and normalizeim = round(X/max(X(:))*256);hopsize=8;xpixel=size(im,2);ypixel=size(im,1);% create COLA windowwind=[ones(1,10)*.25;.25, .25, ones(1,6)*3/4, .25, .25;.25, .75, ones(1,6), .75, .25;.25, .75, ones(1,6), .75, .25;.25, .75, ones(1,6), .75, .25;.25, .75, ones(1,6), .75, .25;.25, .75, ones(1,6), .75, .25;.25, .75, ones(1,6), .75, .25;.25, .25, ones(1,6)*3/4, .25, .25;ones(1,10)*.25];% decompose image.% top left cornerimw = [zeros(10,2),[zeros(2,8);im(1:8,1:8).*wind(3:10,3:10)]];% top edgem=1;for k=7:hopsize:xpixel    if k+9>xpixel        imw(1:10,m*10+1:m*10+10)=[zeros(2,10);[im(1:8,k:xpixel).*wind(3:10,1:xpixel-k+1),zeros(8,9-xpixel+k)]];    else        imw(1:10,m*10+1:m*10+10)=[zeros(2,10);im(1:8,k:k+9).*wind(3:10,1:10)];    end    m=m+1;end% left edgem=1;for k=7:hopsize:ypixel    if k+9>ypixel        imw(m*10+1:m*10+10,1:10)=[zeros(10,2),[im(k:ypixel,1:8).*wind(1:ypixel-k+1,3:10);zeros(9-xpixel+k,8)]];    else        imw(m*10+1:m*10+10,1:10)=[zeros(10,2),im(k:k+9,1:8).*wind(1:10,3:10)];    end    m=m+1;end% middlen=1;for k=7:hopsize:xpixel    m=1;    for p=7:hopsize:ypixel        if k+9>xpixel & p+9>ypixel                       imw(m*10+1:m*10+10,n*10+1:n*10+10)=[[im(k:xpixel,p:ypixel).*wind(1:xpixel-k+1,1:ypixel-p+1),zeros(xpixel-k+1,9-ypixel+p)];zeros(9-xpixel+k,10)];        else            if k+9>xpixel                imw(m*10+1:m*10+10,n*10+1:n*10+10)=[im(p:p+9,k:xpixel).*wind(1:10,1:xpixel-k+1),zeros(10,9-xpixel+k)];            elseif p+9>ypixel                imw(m*10+1:m*10+10,n*10+1:n*10+10)=[im(p:ypixel,k:k+9).*wind(1:ypixel-p+1,1:10);zeros(9-ypixel+p,10)];            else                    imw(m*10+1:m*10+10,n*10+1:n*10+10)=im(p:p+9,k:k+9).*wind;            end        end        m=m+1;    end    n=n+1;endimsize=[size(im,1),size(im,2)];imw=round(imw);% Make Q table%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%nBits = zeros(8,8);for i=1:8 for j=1:8%  nBits(i,j) = 8 - (i^2 + j^2)^0.5;   d = i^2 + j^2;  nBits(i,j) = 8 -  ( (8*d) / (d + halfMax)); endendma = max(nBits(:));mn = min(nBits(:));nBits = round( 8* (nBits - mn) ./ (ma - mn));compressionFactor = 512/sum(sum(nBits))coefScaleFactor = 2 .^ (nBits - 8);q = [[coefScaleFactor;coefScaleFactor(size(coefScaleFactor,1),:);coefScaleFactor(size(coefScaleFactor,1),:)],[coefScaleFactor(:,size(coefScaleFactor,2));0.0039;0.0039],[coefScaleFactor(:,size(coefScaleFactor,2));0.0039;0.0039]];for i=1:10:size(imw,1)    for j=1:10:size(imw,2)        dctCoef(i:i+9,j:j+9) = round(dct2(imw(i:i+9,j:j+9)) .* q) ./ q;    endendimw=dctCoef;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -