我目前正在一台相机上录制显微镜下相同样品的图像,一张是另一张图像。
我有2个问题,我发现在使用Matlab进行后期处理时,我可以安排这些问题。
- 首先,摄像机上的2个图像应该具有相同的像素大小,或者一个只是比另一个大一些,可能是因为光学路径。什么是适应的Matlab函数或关联两个图像的方式,以便它们在X和Y中具有完全相同的像素大小?
Two images on same camera , one bigger or smaller compared to the other one
- 其次,我的样本在录制过程中正在移动一个眩光(当然仍然留在我的视野中)。为了使我的分析更容易,我可以更正图像,使样本保留在与第一张图像相同的位置,以便更容易地进行计算。什么是改编的Matlab函数或方法来纠正图像中的这种运动?
Sample moving in the image on the camera
抱歉我的图纸质量很差!
非常感谢您的建议和帮助。
答案 0 :(得分:0)
首先将图像填零到足够的程度,使两者的尺寸都加倍。
size_padding = max(size(fig1),size(fig2));
fig1_pad = padarray(fig1,size_padding-size(fig1),'post');
fig2_pad = padarray(fig2,size_padding-size(fig2),'post');
假设样本是图像中唯一存在的特征,最好的方法是使用xcorr2()
函数并找到与最大相关性相对应的滞后,以获得两个图像之间的空间偏移:
xc = xcorr2(fig1_pad,fig2_pad);
[max_cc, imax] = max(abs(xc(:)));
[ypeak, xpeak] = ind2sub(size(xc),imax(1));
corr_offset = [ (ypeak-size(fig2_pad,1)) (xpeak-size(fig2_pad,2)) ];
然后使用circshift()
使用您在上一步中获得的延迟来移动其中一个图像。
fig2_shift = circshift(fig2_pad,corr_offset);
现在您有两张相同大小的图像,希望样本处于相同位置。如果要删除填充零,请使用imcrop()
根据自己的喜好裁剪图像。