function [im] = imcompr (infile,singvals,outfile)
% IMCOMPR (infile,singvals,outfile)
if (exist(infile)==2)
a = imread(infile);
figure('Name','Input image');
imshow(a);
else
warndlg('The file does not exist.',' Warning ');
im=[];
return
end
if isrgb(a)
if isa(a(:,:,1),'uint8')
red = double(a(:,:,1));
green = double(a(:,:,2));
blue = double(a(:,:,3));
[u,s,v] = svds(red, singvals);
imred = uint8(u * s * transpose(v));
[u,s,v] = svds(green, singvals);
imgreen = uint8(u * s * transpose(v));
[u,s,v] = svds(blue, singvals);
imblue = uint8(u * s * transpose(v));
im(:,:,1) = imred;
im(:,:,2) = imgreen;
im(:,:,3) = imblue;
imwrite(im, outfile);
figure('Name','Output image');
imshow(im);
return;
end
if isa(a(:,:,1),'uint16')
red = double(a(:,:,1));
green = double(a(:,:,2));
blue = double(a(:,:,3));
[u,s,v] = svds(red, singvals);
imred = uint16(u * s * transpose(v));
[u,s,v] = svds(green, singvals);
imgreen = uint16(u * s * transpose(v));
[u,s,v] = svds(blue, singvals);
imblue = uint16(u * s * transpose(v));
im(:,:,1) = imred;
im(:,:,2) = imgreen;
im(:,:,3) = imblue;
imwrite(im, outfile);
figure('Name','Output image');
imshow(im);
return;
end
if isa(a(:,:,1),'double')
red = double(a(:,:,1));
green = double(a(:,:,2));
blue = double(a(:,:,3));
[u,s,v] = svds(red, singvals);
imred = (u * s * transpose(v));
[u,s,v] = svds(green, singvals);
imgreen = (u * s * transpose(v));
[u,s,v] = svds(blue, singvals);
imblue = (u * s * transpose(v));
im(:,:,1) = imred;
im(:,:,2) = imgreen;
im(:,:,3) = imblue;
imwrite(im, outfile);
figure('Name','Output image');
imshow(im);
return;
end
end
if isgray(a)
dvalue=double(a);
[u,s,v] = svds(dvalue, singvals);
if isa(a,'uint8')
im = uint8(u * s * transpose(v));
end
if isa(a,'uint16')
im = uint16(u * s * transpose(v));
end
if isa(a,'double')
im = (u * s * transpose(v));
end
imwrite(im, outfile);
figure('Name','Output image');
imshow(im);
return;
end
评论0