Fehler im Code < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 21:41 Mi 31.01.2007 | Autor: | max2006 |
Hallo, ich bräuchte Hilfe bei der Fehlersuche in meinem Code:
A=double(imread('imgA'));
B=double(imread('imgB'));
%imgA bzw imgB sind 2 Bilder 578x720 (HöhexBreite)
height=size(A,1);
width=size(A,2);
color=size(A,3);
for i=1:4:572,
for j=1:8:712
MAD_min=256*8*4; mvx=0;mvy=0;
for k=-8:1:8
for l=-8:1:8
MAD=sum(sum(abs(B(i:i+3,j:j+7)-A(i+k:i+k+3,j+l:j+l+7))));
if MAD<MAD_min
MAD_min=MAD;
dy=k;dx=l;
end;
end;end;
fp(i:i+3,j:j+7)=A(i+dy:i+dy+3,j+dx:j+dx+7);
iblk=floor((i-1))/4+1;jblk=floor((j-1))/8+1;
mvx(iblk,jblk)=dx;
mvy(iblk,jblk)=dy;
end;end;
folgende Fehlermedldung erhalte ich:
Subscript indices must either be real positive integers or logicals.
Danke
|
|
|
|
Hallo,
direkt im ersten Durchlauf bekommst du negative Indizes. Dann gilt nämlich:
i=1, j=1, k=-8, l=-8
Daraus folgt dann aber, dass i+k=-7<1.
Du musst am Bildrand aufpassen, weil dort deine Maske über das Bild hinausragt. Also hier immer testen, ob nichtpositive Indizes auftreten können.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:48 So 04.02.2007 | Autor: | max2006 |
Hallo nochmal
hab meinen Code mittlerweile überarbeitet,
allerdings tritt wieder ein kleines Problem auf, bei dem ich nicht weiter weiß:
A=double(imread('imgA'));
B=double(imread('imgB'));
%imgA bzw imgB sind 2 Bilder 578x720 (HöhexBreite)
height=size(A,1);
width=size(A,2);
color=size(A,3);
x1=1;
y1=1;
for i=1:4:572,
for j=1:8:712
MAD_min=256*8*4; mvx=0;mvy=0;
for k=-4:1:4
for l=-4:1:4
if(x1+x)<1||(y1+y)<1||(x1+x+8)>width||(y1+y+4)>height
continue;
end
MAD=sum(sum(abs(B(i:i+3,j:j+7)-A(i+k:i+k+3,j+l:j+l+7))));
if MAD<MAD_min
MAD_min=MAD;
dy=k;dx=l;
end;
end;end;
fp(i:i+3,j:j+7)=A(i+dy:i+dy+3,j+dx:j+dx+7);
iblk=floor((i-1))/4+1;jblk=floor((j-1))/8+1;
mvx(iblk,jblk)=dx;
mvy(iblk,jblk)=dy;
end;end;
das Bild fp, das ich erhalte hat die Dimension 572x712,
sollte allerdings wie die beiden Ausgangsbilder 576x720 sein
Danke
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:14 So 04.02.2007 | Autor: | viktory_hh |
ja, dann zähle doch einfach:
1+8+8+8+....+8 nach 89 mal bekommts du 713 d.h.
das letzte j=705
und damit 705+7 = 712
also muss Du die Grenzen anpassen!!!
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 21:34 So 04.02.2007 | Autor: | max2006 |
ja..also müsste es heißen
j=1:8:713
da bekomm ich dann allerdings wieder die Fehlermeldung:
Index exceeds matrix dimensions.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 22:20 Di 06.02.2007 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|