2010-12-28 8 views
1

Ich habe diese MATLAB-Funktion. Als ich es ausführte, tauchte die folgende Fehlermeldung auf. Kann mir jemand einen Hinweis geben? Vielen Dank. Der Code wird auch unten angezeigt.Problem mit MATLAB-Funktionen

[h, im_matched, theta, I, J] = im_reg_MI ('keyframe1.jpg', 'keyframe2.jpg', 0, 1) ??? Undefinierte Funktion oder Variable "h".

Fehler in ==> im_reg_MI bei 74 [a, b] = max (h (:));% der max von MI zu finden und indecises

Unten ist der Code.

[h,im_matched, theta,I,J]=im_reg_MI(image1, image2, angle, step) 
[m,n]=size(image1); 
[p,q]=size(image2); 
[a,b]=size(angle); 
im1=round(image1); 

for k=1:b 
    J = rotate_image(angle(k),image2); %rotated cropped IMAGE2 
    image21=round(J); 
    [m1,n1]=size(image21); 
    for i=1:step:(m1-m) 
     for j=1:step:(n1-n) 
       im2=image21(i:(i+m-1),j:(j+n-1)); % selecting part of IMAGE2 matching the size of IMAHE1 
       im2=round(im2); 
       h(k,i,j)=MI2(im1,im2); % calculating MI 
      end 
     end 
    end 


[a, b] = max(h(:));% finding the max of MI and indecises 

Antwort

2

Das Problem ist, dass man eigentlich nicht für die image1 und image2 Argumente in Bilddaten übergeben. Sie übergeben nur Zeichenfolgen mit den Bilddateinamen 'keyframe1.jpg' und 'keyframe2.jpg'.

Sie müssen zuerst die Bilddaten aus den Dateien mit IMREAD laden und dann die Bilddaten an im_reg_MI übergeben. Unter der Annahme, die Bilder im aktuellen Arbeitsverzeichnis sind, würden Sie so etwas tun:

image1 = imread('keyframe1.jpg'); 
image2 = imread('keyframe2.jpg'); 
[h,im_matched,theta,I,J] = im_reg_MI(image1,image2,0,1); 

EDIT:

Es scheint innerhalb im_reg_MI ein zusätzlicher Fehler zu sein, der auftritt, wenn image21 (die gedrehte Version image2) ist für eine oder mehrere ihrer Abmessungen gleich groß oder kleiner als image1. Wenn m1 waren weniger als oder gleich m und/oder n1 waren weniger als oder gleich n, dann eine oder beide der Schleifen für i oder j würde nie da 1:step:(m1-m) und/oder 1:step:(n1-n) würde create an empty vector eingegeben werden. Daher würde der innere Schleifencode niemals ausgeführt und h würde nie erstellt werden.

Und noch eine zusätzliche Note ...

bemerkte ich, dass die Funktion im_reg_MI erscheint die beiden Bilder als 2-D zu behandeln, das heißt, sie intensity images sein müssen (das heißt Graustufen- oder binären Bilddaten). Wenn Sie mit indexed oder RGB Bilddaten arbeiten, glaube ich nicht im_reg_MI wird sie richtig behandeln.

+0

Hallo gnovice. Danke für die Hilfe. Ich folgte Ihrem Vorschlag und übergab die Bilddaten an im_reg_MI, aber derselbe Fehler kam wieder. Übrigens, zu Ihrer Information befindet sich der MI2 (im1, im2), der im obigen Code aufgerufen wird, im selben Verzeichnis. Ich denke, es sollte nicht das Problem sein. Ich weiß nicht, welcher Teil falsch ist. – view

+0

@appi: Ich habe einen zusätzlichen potentiellen Fehler innerhalb von 'im_reg_MI' gefunden, der bei bestimmten Bildgrößen auftritt. Ich fügte meiner Antwort eine Erklärung hinzu. – gnovice

+0

Danke für die Erklärung! Es hilft mir sehr! – view