2010-12-28 16 views
1

このMATLAB関数があります。私がそれを走らせると、次のエラーメッセージが表示されました。誰も私に何かヒントを与えることができますか?ありがとうございました。コードは以下にも示されています。MATLAB関数の問題

[H、im_matched、シータ、I、J] = im_reg_MI( 'keyframe1.jpg'、 'keyframe2.jpg'、0、1) ?未定義関数または変数 "h"。

74で==> im_reg_MI [A、B] = MAX(H(:))でのエラー;%以下は

コードであるMIの最大値を見つけることとindecises。

[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 

答えて

2

問題は、あなたが実際にimage1image2引数のための画像データを渡していないことです。画像ファイル名が'keyframe1.jpg''keyframe2.jpg'の文字列を渡すだけです。

IMREADを使用してファイルから画像データをロードしてから、im_reg_MIに画像データを渡す必要があります。画像を想定すると、現在の作業ディレクトリにある、あなたはこのようなものだろう:

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

EDIT:

image21場合に発生im_reg_MI内の追加のエラー(回転バージョンのがあるようですimage2)は、1つ以上の寸法についてはimage1と同じか、それより小さい。 m1m及び/又はn1以下であった場合iためのループ次いでn、一方または両方の以下た又はj1:step:(m1-m)及び/又は希望create an empty vector1:step:(n1-n)ので、入力されることはないであろう。したがって、内部ループコードは実行されず、hは決して作成されません。

そして、1つの余分のノート...

私は機能im_reg_MIは、彼らがintensity images(すなわち、グレースケールまたはバイナリ画像データ)でなければならないことを意味2-D、として2枚の画像を扱うように見えることに気づきました。 indexedまたはRGBの画像データを扱っている場合、私はim_reg_MIが正しく処理するつもりはないと考えています。

+0

こんにちは。助けてくれてありがとう。私はあなたの提案に従ってイメージデータをim_reg_MIに渡しましたが、同じエラーが再び出ました。 Btw、あなたの情報のために、上記のコードで呼び出されるMI2(im1、im2)は同じディレクトリの下にあります。私はそれが問題ではないはずです。どの部分が間違っているのか分かりません。 – view

+0

@appi:特定のイメージサイズで発生する 'im_reg_MI'の中に潜在的なエラーが追加されています。私はそれを私の答えに加えました。 – gnovice

+0

説明をありがとう!それは私に多くの助けになる! – view