2014-06-23 299 views
1

我似乎無法想出解決辦法: 我需要重塑矩陣爲載體,到目前爲止,我有這樣的:如何將圖像矩陣轉換成向量在Matlab

img = imread('image.png'); 
grayImage = rgb2gray(img); 
imageArray = reshape(grayImage, r, c); 

它輸出像:

imgVector=[1 2 3 4 5 6 7 8 9 0] 

我的問題是我需要做的是這樣的:

imgArray=[1 2 3 
      4 5 6 
      7 8 9] 

重塑爲:

imgVector=[1 2 3 6 5 4 7 8 9] 

我希望有道理。基本上我需要將它解壓縮,所以它從左到右,然後從右到左在下一行之後。任何幫助,將不勝感激。先謝謝你。

+0

那麼image.png是你的圖片文件?我想? – nerd

回答

2

從根本上說,你要做的是從左到右翻轉每一行,所以內置功能fliplr將做到這一點。

做到在一個單一的步驟,只是在你的索引操作選擇每隔一行:

>> imgArray=[1 2 3; 4 5 6; 7 8 9] 

imgArray = 

    1  2  3 
    4  5  6 
    7  8  9 

>> imgArray(2:2:end,:)=fliplr(imgArray(2:2:end,:)) 

imgArray = 

    1  2  3 
    6  5  4 
    7  8  9 

然後你就可以重塑把它變成一個載體。

imgVector=reshape(imgArray',1,[]); 
#%transpose the array----^ 

由於整形是按列方式完成的,請首先轉置數組以獲得所需格式的數組。

1

您可以使用翻轉函數,它將矢量的順序顛倒。 下面是一個簡單的例子:

A = [1 2 3;4 5 6;7 8 9]; 

A = 

    1  2  3 
    4  5  6 
    7  8  9 

A(2,:) = fliplr(A(2,:)); 

A = 

    1  2  3 
    6  5  4 
    7  8  9 

所以可以使用一個循環的翻蓋每隔一行爲您的整個圖像。希望有所幫助!

+1

+1使用fliplr,但你不需要循環 - 看到我的答案如何在整個矩陣中做到這一步 – tmpearce

+0

啊,聰明,我會盡快嘗試,謝謝Mr.Benoit! –

+0

偉大的我正在編輯我的答案,在一個單一的步驟。 :) –