📄 decompression.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 + -