Convert matlab image svd method to opencv

asked 2014-06-23 05:02:56 -0500

lalecarbon gravatar image

updated 2014-06-23 05:12:32 -0500

Hello everyone,
I want to write a program with opencv by c++ in the visual studio. My code is following matlab code:

close all
clear all
clc

%reading and converting the image
inImage=imread('pic.jpg');
inImageD=double(inImage);

[U,S,V]=svd(inImageD);

% Using different number of singular values (diagonal of S) to compress and
% reconstruct the image
dispEr = [];
numSVals = [];
for N=5:25:300
  % store the singular values in a temporary var
  C = S;

  % discard the diagonal values not required for compression
  C(N+1:end,:)=0;
  C(:,N+1:end)=0;

  % Construct an Image using the selected singular values
   D=U*C*V';


  % display and compute error
  figure;
  buffer = sprintf('Image output using %d singular values', N)
  imshow(uint8(D));
  title(buffer);
  error=sum(sum((inImageD-D).^2));

  % store vals for display
  dispEr = [dispEr; error];
  numSVals = [numSVals; N];
end

What's your opinion to do this? I want to save image in a text file and retrieve it from file into the Mat array. I've written this part as follow:

Mat image;
FileStorage read_file("pic_file.txt", FileStorage::READ);
read_file["pic"] >> image;
read_file.release(); 
Mat P;
image.convertTo(P, CV_32FC3,1.0/255);
SVD svda(P); //or SVD::compute(P,W,U,V);

But I have problem with SVD function and it doesn't work. Is there anything to do for computing SVD compression of an image?


Thank You so much.
Vahids.

edit retag flag offensive close merge delete

Comments

lalecarbon gravatar imagelalecarbon ( 2014-06-25 05:13:57 -0500 )edit