Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

How do I apply SVD (Singular Value Decomposition) to an image?

Asked by buddy on 2 Mar 2011

The syntax given for singular value decomposition is svd(x).

I tried it with my image, but it didn't work. Can you tell me how to work with svd for images please?

2 Comments

David Young on 2 Mar 2011

Please could you say what the error message was, and also show any other parts of your code that might be relevant.

Andreas Goser on 2 Mar 2011

While I agree with David on the need for specifics, my crystal ball tells my this is about data types and will craft an answer for that...

buddy

Products

No products are associated with this question.

4 Answers

Answer by Andreas Goser on 2 Mar 2011
Accepted answer

This sounds like it is about data types or sizes. Example

pout = imread('pout.tif');
svd(pout) % does not work
??? Undefined function or method 'svd' for input arguments of type 'uint8'.
svd(double(pout)) % works

I can however not comment on the mathematical sense of this. I you have another image format like here, you need to think about what you actually like to achieve

I = imread('board.tif');
svd(double(I))
??? Undefined function or method 'svd' for input arguments of type 'double' and
attributes 'full 3d real'.

1 Comment

buddy on 2 Mar 2011

thank u sir.. i understand it is bcos of datatype..

Andreas Goser
Answer by meenakshi on 6 Sep 2011

HELLO GOSER

                   i=imread('pout.tif');
                   i=im2double(i)
                   [u s v]=svd(i); 

you can try like this.

                     k.meenakshi     

1 Comment

Walter Roberson on 6 Sep 2011

That would not have any more success than svd(double(I)) if I is a truecolor (3D) image. Remember, images can be stored as pseudocolor (2D arrays in which the values indicate which index to use out of a color map), or as truecolor (3D arrays in which the values directly indicate the color information for each pixel without any map.) The problem is that svd() of a pseudocolor image is not meaningful, and svd() of a 3D array is not allowed. The only choice available to get anything useful out is to convert the image to grayscale and svd() the grayscale image.

meenakshi
Answer by slama najla on 21 Apr 2012

Hello, can some body help me with the code of SVD decomposition in 3d medical data in matlab please.

1 Comment

Walter Roberson on 21 Apr 2012

No. SVD is only for 2D.

You could take the svd() of each plane.

slama najla
Answer by slama najla on 28 Apr 2012

But many approaches use it us decomposition for 3d data in watermarking,this is why i reask this question.thanks

1 Comment

Walter Roberson on 28 Apr 2012

SVD is *defined* in terms of rectangular matrices. There is no method to apply SVD to a 3D matrix. I looked at some of the articles about color image watermarking using svd, and of the ones I could access, not one of them attempted to apply SVD to a 3D matrix.

slama najla

Contact us