我有两个图像,我试图共同注册 - 即,一个可能是一个球在图片的中心,另一个是在边缘附近的同一个球,我试图找到像素麻木,我必须移动第二个图像,以便球会在同一个地方。 (我实际上使用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