我有兩個圖像,我試圖共同註冊 - 即,一個可能是一個球在圖片的中心,另一個是在邊緣附近的同一個球,我試圖找到像素麻木,我必須移動第二個圖像,以便球會在同一個地方。 (我實際上使用3D MRI腦掃描,但原理是相同的)。MATLAB的fminsearch函數
我已經寫了一個函數,它可以將球向左,向右,向上或向下移動給定數量的像素,以及另一個函數,該函數比較中間球圖像與翻譯的相關性球在邊緣的圖像。當兩個球位於相同的位置時,相關函數將返回0,其他位置的數字大於0。
我試圖使用fminsearch
(documentation)找到相關函數的最低的最優翻譯(即球在同一個地方被),像這樣:
global reference_im unknown_im;
starting_trans = [0 0 0];
trans_vector = fminsearch(@correlate_images,starting_trans)
correlate_images.m:
function r = correlate_images(translate)
global reference_im unknown_im;
new_im = move_image(unknown_im,translate(1),translate(2),translate(3));
% This bit is unimportant to the question
% but you can see how I calculate my correlation
r = 1 - corr(reshape(new_im,[],1),reshape(reference_im,[],1));
有兩個問題,首先是fminsearch
堅持要將平移向量的float值傳遞給correlate_images
函數。有什麼方法可以告訴它只有整數是必要的嗎? (我會節約大量的CPU週期!)
其次,當我運行這個程序所產生的trans_vector
總是一樣starting_trans
- 我想這是因爲沒有最低已經找到了,但有另外一個原因它只是顯然不工作?
非常感謝!
編輯
我發現我的想法是輸出trans_vector
總是一樣starting_trans
的原因。 fminsearch
查看起始值,然後從這裏開始每個方向的小增量,這個小增量總是小於1,這意味着相關的結果將是完美匹配的(因爲move_image
將返回與用於子像素移動的輸入圖像)。我將繼續致力於說服matlab僅針對整數值進行fminsearch!
在進一步的研究(http://www.mathworks.se/matlabcentral/newsreader/view_thread/155500)事實證明'fminsearch'不能用於整數問題!因此,我不得不放棄使用這種方法。感謝你的幫助! – 2010-01-13 11:29:12