2016-04-25 10 views
0

Screenshot of the reading切り捨てられた近似を計算するにはどうすればよいですか?

imread()を使用して画像を3つの行列のセットに変換すると、は、N=1,2,3,4,8,16,32,64,128という用語を使用して各行列の切り捨てられた近似を計算します。私は行列を持っていますが、私はその最後の部分についてはあまりよく分かりません。読みは少し曖昧です。切り捨てられた近似の意味はどういう意味ですか?


与えられた回答に基づいて更新:

A = double(imread("image.jpg"))/255; 

    [U1, S1, V1] = svd(A(:,:,1)); 
    [U2, S2, V2] = svd(A(:,:,2)); 
    [U3, S3, V3] = svd(A(:,:,3)); 

N = 128;  
trunc_image = (U1(1:763,1:N)*S1(1:N,1:N)*V1(1:N,1:691))*255; 

imwrite(trunc_image, "truncimg.jpg", "jpg"); 

を...しかし、結果のイメージは、次のようになります:

私は次のことを試してみました

screenshot of resulting image

+0

の代わりに[ 'svd'(http://www.mathworks.com/help/からすべての特異値を使用してmatlab/ref/svd.html)を使用する場合は、最大値から最大値までの最大値(あなたのリストによる)から128個の最大値までを使用します。 – TroyHaskin

+0

@TroyHaskinどういう意味ですか?これらの値はどのように使うのですか?* – whatwhatwhat

+1

イメージにはすべての情報があります:イメージAの行列形式はSVDで分解でき、合計 'sigma_k * u_k * v_k.''は正確に' A '。しかし、それらのすべてではなく、最大の特異値を合計するだけで 'A'を近似することができます。また、「N」(近似項の数)が「R」(特異値の総数)よりも少ない場合は、計算量が少なくてよい近似が得られる可能性があります。 – TroyHaskin

答えて

2

画像上でsvdを実行するとI

[U,S,V] = svd(I,'econ'); %//you get matrices U, S, V 

Sは対角線に沿って特異値を減少させると、diagonal行列であろう。ここでは何が起こる

I_recon = U(1:256,1:N)*S(1:N,1:N)*V(1:256,1:N).'; %//Reconstruct by keeping the first N singular values in S. 

I_reconN最も重要な特異値から再構成された画像であることである:

Approximation by truncating...は、私がSに特異値をゼロにすることによりI'を再構築できることを意味します。これを行う目的は、画像Iless significantの寄稿を削除し、データが少ないIを表すことができるようにすることです。

これはNを変化させると、再構成画像の一例である:

SVD reconstruction of I

+0

私はあなたが提案したものを試していて、うまくいきません。結果画像は、N = 128であっても、黒、灰色、白の線だけです。これは私が使用したコードです: 'A = double(imread(" image.jpg "))/ 255; [U1、S1、V1] = svd(A(:、:、1));[U2、S2、V2] = svd(A(:、:、2)); [U3、S3、V3] = svd(A(:、:、3)); N = 128; trunc_image =(U1(1:763,1:N)* S1(1:N、1:N)* V1(1:N、1:691))* 255;画像を読んだ後に255で割り切る必要はありません(ダブルマトリックスに変換すれば十分です)。imwrite(trunc_image、 "truncimg.jpg"、 "jpg"); ' – whatwhatwhat

+0

@whatwhatwhat 2)あなたは緑と青のチャンネルを使う必要はないと思われるので、3行と4行は必要ありません。3)再構成するときは、必ず 'V'マトリックスを転置してください。 4) 'double '型の行列で作業しているので、何かを表示する前に必ず255で割ります。 – Lincoln

+0

私が最初に255で割ったのは、私の問題のセットがそうするよう指示したからです。 [このスクリーンショットを見る](http://imgur.com/ezkSX62)しかし、私はこれを行う上で任意のポイントが表示されません! 'imwrite'を使う前に255で除算した後に255を掛けると便利な理由は分かりますか? – whatwhatwhat

関連する問題