poster
2019-12-10, 20:30
我有两个要注册的图片-即一个可能是图片中心的一个球,另一个可能是边缘附近的同一个球,并且我试图找到像素数目的麻木必须移动第二个图像,以便球将在同一位置。 (我实际上正在使用3D MRI脑部扫描,但是原理是相同的)。
我编写了一个函数,该函数可以将球向左,向右,上或下移动一个给定数量的像素,另外一个函数可以比较中心球图像与翻译后的水平球的相关性。边缘图像。当两个球位于同一位置时,相关函数将返回0,而对于其他位置,该函数将返回大于0的数字。
我正在尝试使用fminsearch ( 文档 (http://www.mathworks.com/access/helpdesk_r13/help/techdoc/ref/fminsearch.html) )为相关函数的最小值(例如,球在同一位置)找到最佳翻译,如下所示:
global reference_im unknown_im; starting_trans = [0 0 0]; trans_vector = fminsearch(@correlate_images,starting_trans) relatede_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坚持通过浮动值平移矢量到correlate_images功能。有什么方法可以告知它只需要整数吗? (我会节省大量的CPU周期!)
其次,当我运行该程序时,生成的trans_vector始终与starting_trans相同-我认为这是因为未找到最小值,但是还有其他原因使其无法正常工作吗?
非常感谢!
编辑
我发现我认为这是输出trans_vector始终与starting_trans相同的原因。 fminsearch查看起始值,然后从该值开始在每个方向上都有一个小的增量,这个小的增量始终小于1,这意味着相关的结果将是一个完美的匹配(因为move_image将返回与输入图像以进行亚像素移动)。我将继续说服matlab仅对整数值进行fminsearch!
回答:
图像处理工具箱中有一个非常相似的演示,它使用归一化互相关函数normxcorr2 (https://www.mathworks.com/help/images/ref/normxcorr2.html)进行图像配准。为避免重复同一件事,请直接查看演示:
使用归一化互相关注册图像 (https://www.mathworks.com/help/images/examples/registering-an-image-using-normalized-cross-correlation.html)
更多&回答... (https://stackoverflow.com/questions/2050510)
我编写了一个函数,该函数可以将球向左,向右,上或下移动一个给定数量的像素,另外一个函数可以比较中心球图像与翻译后的水平球的相关性。边缘图像。当两个球位于同一位置时,相关函数将返回0,而对于其他位置,该函数将返回大于0的数字。
我正在尝试使用fminsearch ( 文档 (http://www.mathworks.com/access/helpdesk_r13/help/techdoc/ref/fminsearch.html) )为相关函数的最小值(例如,球在同一位置)找到最佳翻译,如下所示:
global reference_im unknown_im; starting_trans = [0 0 0]; trans_vector = fminsearch(@correlate_images,starting_trans) relatede_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坚持通过浮动值平移矢量到correlate_images功能。有什么方法可以告知它只需要整数吗? (我会节省大量的CPU周期!)
其次,当我运行该程序时,生成的trans_vector始终与starting_trans相同-我认为这是因为未找到最小值,但是还有其他原因使其无法正常工作吗?
非常感谢!
编辑
我发现我认为这是输出trans_vector始终与starting_trans相同的原因。 fminsearch查看起始值,然后从该值开始在每个方向上都有一个小的增量,这个小的增量始终小于1,这意味着相关的结果将是一个完美的匹配(因为move_image将返回与输入图像以进行亚像素移动)。我将继续说服matlab仅对整数值进行fminsearch!
回答:
图像处理工具箱中有一个非常相似的演示,它使用归一化互相关函数normxcorr2 (https://www.mathworks.com/help/images/ref/normxcorr2.html)进行图像配准。为避免重复同一件事,请直接查看演示:
使用归一化互相关注册图像 (https://www.mathworks.com/help/images/examples/registering-an-image-using-normalized-cross-correlation.html)
更多&回答... (https://stackoverflow.com/questions/2050510)