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

on 2 Mar 2011

### Andreas Goser (view profile)

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?

David Young

### David Young (view profile)

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

### Andreas Goser (view profile)

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...

## Products

No products are associated with this question.

### Andreas Goser (view profile)

on 2 Mar 2011

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'.
```

buddy

### buddy (view profile)

on 2 Mar 2011

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

### meenakshi (view profile)

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     `

Walter Roberson

### Walter Roberson (view profile)

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.

### slama najla (view profile)

on 21 Apr 2012

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

Walter Roberson

### Walter Roberson (view profile)

on 21 Apr 2012

No. SVD is only for 2D.

You could take the svd() of each plane.

### slama najla (view profile)

on 28 Apr 2012

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

Walter Roberson

### Walter Roberson (view profile)

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.

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