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

📄 decompression.m

📁 本程序利用奇异值分解对3通道彩色图像进行压缩分解
💻 M
字号:
function [varargout] = decompression(img, average, vector)
%Syntax: [varargout] = decompression(img, average, vector).
%img, average, vector are the same parameters as compression function.
%see [img, average, vector] = compression(img, K).
%varargout: output argument.

num = nargout;
S1 = size(img);
S2 = size(average);
S3 = size(vector);
K= S2(1);
m = S1(1) / K;
img = double(img);
%check size of the input arguments.
if size(S1,2) ~= 3 | S1(1) ~= S1(2)
    error('the first argument must be N*N*3 matrix.');
end

 if mod(S1(1),S2(1)) | S3(1) ~= S2(1).^2 | S2(1) ~= S2(2) | S3(2) ~= 3
     error('improper input arguments.');
 end

img1 = img(:, :, 1);
img2 = img(:, :, 2);
img3 = img(:, :, 3);

average1 = average(:, :, 1);
average2 = average(:, :, 2);
average3 = average(:, :, 3);

temp1 = reshape(vector(:, 1), K, K);
temp2 = reshape(vector(:, 2), K, K);
temp3 = reshape(vector(:, 3), K, K);
%compute decompressing image
for i = 1:K
    for j = 1:K
        for p = 1:m
            for q = 1:m             
                img1(i+K*(p-1), j+K*(q-1)) = img1(i+K*(p-1), j+K*(q-1)) .* temp1(i, j);
                img2(i+K*(p-1), j+K*(q-1)) = img2(i+K*(p-1), j+K*(q-1)) .* temp2(i, j);
                img3(i+K*(p-1), j+K*(q-1)) = img3(i+K*(p-1), j+K*(q-1)) .* temp3(i, j);
            end
        end
    end
end

for i = 1:K
    for j = 1:K
        for p = 1:m
            for q = 1:m
                img1(i+K*(p-1), j+K*(q-1)) = img1(i+K*(p-1), j+K*(q-1)) + average1(i, j);
                img2(i+K*(p-1), j+K*(q-1)) = img2(i+K*(p-1), j+K*(q-1)) + average2(i, j);
                img3(i+K*(p-1), j+K*(q-1)) = img3(i+K*(p-1), j+K*(q-1)) + average3(i, j);
            end
        end
    end
end

img(:, :, 1) = img1;
img(:, :, 2) = img2;
img(:, :, 3) = img3;
%change class from double to uint8 to scale the image 
img = uint8(mat2gray(img)*255);
%show decompressing image if necessarily
if num == 0
    figure;
    imshow(img);
    title('decompressing image');
elseif num == 1
    varargout{1} = img;
else
    error('too many output arguments.');
end

⌨️ 快捷键说明

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