1樓:電燈劍客
利用奇異值bai分解可以壓du縮一個矩陣,但是對zhi於一般的影象dao來說每個通道都是一
回個矩陣,所以不能直接用答svd。
對於a=udv',如果要重排d的話直接交換u,v中相應的列就行了,相當於a=up*p'dp*p'v'。一般來講如果呼叫數學庫中的函式的話d肯定是已經排好的。
補充:給你舉個例子,如果你要交換d(i,i)和d(j,j),那麼同時把u的第i列和第j列交換一下,把v的第i列和第j列交換一下。
主流的數學庫當中svd都是lapack的實現,次序已經排好了。
基於奇異值分解(svd)的方法壓縮影象matlab實現 50
2樓:匿名使用者
對影象壓縮不是很瞭解。奇異值分解在matlab中一般用svd(x)語句
3樓:匿名使用者
相信這個是你想要的答案:
求matlab 奇異值分解函式 svd和svds的區別
4樓:匿名使用者
設a為m*n階矩陣,a'表示a的轉置矩陣,a'*a的n個特徵值的非負平方根叫作a的奇異值。記為σi(a)。
這幾天做實驗涉及到奇異值分解svd(singular value decomposition),涉及到這樣的一個問題,
做pca時候400幅影象拉成向量按列擺放,結果擺成了比如說10000*400大小的矩陣,
用到svd函式進行奇異值分解找主分量,結果matlab提示超出記憶體,後來想起還有個函式叫svds,看到別人用過,以為只是一個變體,沒什麼區別,就用上了,結果確實在預料之中。但是今天覺得不放心,跑到變數裡面看了下,發現這個大的矩陣被分解成了
三個10000*6,6*6,400*6大小的矩陣的乘積,而不是普通的svd分解得到的10000*10000,10000*400,400*400大小的矩陣乘積,把我嚇了一跳,都得到預期的結果,難不成這裡還出個簍子?趕緊試驗,
發現任給一個m*n大小的矩陣,都是被分解成了m*6,6*6,n*6大小的矩陣的乘積,為什麼都會出現6呢?確實很納悶。help svds看了一下,發現svds(a) 返回的就是svds返回的就是最大的6個特徵值及其對應的特徵行向量和特徵列向量,
還好,我們實驗中是在svds得到列向量中再取前5個最大的列向量,這個與普通的svd得到的結果是一致的,虛驚一場。。。還得到了一些別的,比如
改變這個預設的設定,
比如用[u,d,v]=svds(a,10)將得到最大的10個特徵值及其對應的最大特徵行向量和特徵列向量,
[u,d,v]=svds(a,10,0)將得到最小的10個特徵值及其對應的特徵行向量和特徵列向量,
[u,d,v]=svds(a,10,2)將得到與2最接近的10個特徵值及其對應的特徵行向量和特徵列向量。
總之,相比svd,svds的可定製性更強。
奇異值分解非常有用,對於矩陣a(m*n),存在u(m*m),v(n*n),s(m*n),滿足a = u*s*v』。
u和v中分別是a的奇異向量,而s是a的奇異值。
aa'的正交單位特徵向量組成u,特徵值組成s's,
a'a的正交單位特徵向量組成v,特徵值(與aa'相同)組成ss'。
matlab二值影象擷取
可以使用bwperim 函式進行輪廓提取,具體 如下 讀取原圖 im imread filepath imshow im title 原圖 轉二值影象 bw im2bw im 輪廓提取 contour bwperim bw figure imshow contour title 輪廓 原圖和所提取的...
一幅灰度影象,矩陣為512 512,灰度級別為256,在計算
2的8次方 256,8個bit位可表示一個畫素,8bit 1位元組理論上是512 512 262144 byte 256 kb 不同格式的影象壓縮演算法不一樣,所以實際大小也不同bmp是無失真壓縮,512 512灰度圖實際大小就是256kb其它格式大小比bmp格式要小,但是會犧牲一些定的影象質量影象...
怎麼在MATLAB中計數二值影象中目標物八鄰域值為某一值的個數
是這樣abs imfilter punimage,1 0 0 0 1 0 0 0 0 abs imfilter punimage,0 1 0 0 1 0 0 0 0 abs imfilter punimage,0 0 1 0 1 0 0 0 0 abs imfilter punimage,0 0 0...