2016-05-26 6 views
0

Ich habe diesen Matlab-Code geschrieben, um eine Bildmatrix in eine kleinere Matrix der Größe 787x1000 zu unterteilen.Subskribiertes Zuweisungsdimensions-Mismatch in Matlab Warum?

in der folgenden Code: zuerst werde ich ein Bild so I_in = 512x512x3 lesen, dann ändere ich es in binäre und umformen es zu sein (6291456x1), danach habe ich die Anzahl der Frames berechnet (1 Frame = 1000x1) so Ich brauche 787. Dann weise ich der Rahmenmatrix Speicher zu. Code

I_in = imread('aaaa.png'); 

% encoding image into array of bits 
B = de2bi(I_in); 
X=reshape(double(B),numel(B),1); 
m= length(B); 
numFrames = floor((m-1)/1000)+1; 
% allocate memory to the frame matrix 
frameData = zeros(numFrames,1000); 

for k=1:numFrames 
startAtIdx = (k-1)*1000+1; 

if k~=numFrames 
    frameData(k,:) = X(startAtIdx:startAtIdx+1000-1); 
else 
    % handle this case separately in case the number of input samples 
    % does not divide evenly by the window size 
    frameData(k,1:m-startAtIdx+1) = X(startAtIdx:end); 
end 

end 

leicht hier Schritte erklären, wenn ich dies ausführen wird es mir diese Fehlermeldung zeigt:

indizierte Zuweisung Dimension stimmen nicht überein.

Fehler in Untitled1 (Zeile 20) frameData (k, 1: m-startAtIdx + 1) = X (startAtIdx: Ende);

ich bin ziemlich nicht wirklich sicher, dass der Ausgang, den ich schrieb, mir eine Ausgabe von frameData (1x1000) geben wird.

Jeder Körper kann dabei helfen.

Grüße

+2

Drucken, um die Dimensionen der 'frameData' und 'X' bei jedem Schritt und in der Schleife versuchen und hoffentlich werden Sie Ihren Code debuggen dich selber :) . – Nishant

+0

Hinzufügen zu dem, was Nishant sagte, müssen Sie die Werte von "1: m-startAtIdx + 1" und "startAtIdx: end" bei jeder Iteration überprüfen und sicherstellen, dass sie die gleichen Größenbereiche umfassen. Verwenden Sie den Debugger oder drucken Sie sie einfach aus. – Dan

Antwort

0

m = numel(B); 

statt

m = length(B);