2014-11-09 90 views
-1

我正在執行以下代碼以在圖像和w之間獲得矩陣乘法。 爲什麼我會收到Subscripted assignment dimension mismatch錯誤。在matlab中下標賦值尺寸不匹配

[e,f] = size(outImg);  
m = zeros(e,f);  
w = [1 2 4 8; 16 32 64 128; 256 512 1024 2048; 4096 8192 16384 32768];  
for i = 1:e-3  
    for j = 1:f-3  
     I = double(outImg((i:i+3),(j:j+3)));  
     m(i,j) = I * w;  
    end  
end 
+1

這是因爲'I'是一個4×4矩陣,'W'也是一個4×4矩陣。您試圖將兩個4 x 4矩陣(也是4 x 4矩陣)的乘法運算放在'm'中的單個位置。您的表情左側沒有足夠的位置可供右側進入。你究竟想在這裏完成什麼? 「*圖像和'w' *之間的矩陣乘法對我來說沒有任何意義。 – rayryeng 2014-11-09 02:50:06

+3

有用的提示:按ctrl + a選擇編輯器窗口中的所有代碼,然後按ctrl + i自動縮進您的代碼。這將使閱讀起來更容易。 – David 2014-11-09 03:01:09

+0

這裏我必須計算索引值,在那裏我有一個圖像,我做了4×4重疊塊的圖像,然後我做了一個2ᵏ值的數組(其中2ᵏ= 0..2^16),我必須編碼index as =Σ〖2ᵏSͪ〗其中S^h =圖片4×4塊 – STripathy 2014-11-09 13:24:36

回答

0

這是繼續從我的評論,現在理解你以後真正的。你打算做的是執行逐元素乘法Iw,然後總和矩陣中的所有元素。我所說的元素是指一個矩陣中的相應值乘以另一個矩陣中相應的位置,這就是結果。因此,您只需將*運營商更改爲.*,然後對整個矩陣進行求和。換句話說,這樣做:

[e,f] = size(outImg);  
m = zeros(e,f);  
w = [1 2 4 8; 16 32 64 128; 256 512 1024 2048; 4096 8192 16384 32768];  
for i = 1:e-3  
    for j = 1:f-3  
     I = double(outImg((i:i+3),(j:j+3)));  
     m(i,j) = sum(sum(I .* w)); %// Change 
    end  
end 

請注意嵌套sum調用。這是因爲在對矩陣進行求和時,默認情況下,它會對每列的所有行進行求和,並生成包含此結果的單個行向量。如果要對矩陣中的每個值進行求和,則必須再次調用sum來求和行向量以計算矩陣的總和。現在應該等於單個值,並且不應再出現尺寸不匹配錯誤。

祝你好運!

+0

非常感謝你的工作。 – STripathy 2014-11-10 01:06:44

+0

我想將m(i,j)值存儲在2行的1D數組中。第一排wd是m(ij)計數器,第二排w'd是每次迭代的m(ij)值。我該怎麼做?請幫助 – STripathy 2014-11-17 14:34:27

+0

我提出了另一個問題。想要將2D轉換爲一維數組(2,count)。 – STripathy 2014-11-17 14:43:24