Matlab中如何计算两张相似图像的x、y轴像素偏移量
Matlab计算两幅图像像素偏移量的方法
针对仅存在平移偏差的相似图像,最常用的方案是基于归一化二维互相关计算偏移,精度高、抗光照干扰能力强,适配你提供的这类图像场景。
操作步骤
- 第一步:读取并预处理图像
% 读取参考图像和偏移图像 img_ref = imread('1diPk.png'); % 居中的参考图像 img_offset = imread('mFSD3.png'); % 存在偏移的待计算图像 % 彩色图像统一转灰度图再计算,灰度图可跳过该步骤 if size(img_ref,3) == 3 img_ref_gray = rgb2gray(img_ref); img_offset_gray = rgb2gray(img_offset); end
- 第二步:计算互相关并推导偏移量
互相关结果的峰值位置对应两幅图像的最佳匹配位置,直接通过峰值坐标换算即可得到xy方向的偏移值,调用Matlab内置normxcorr2函数即可实现计算:
% 计算归一化二维互相关结果 c = normxcorr2(img_offset_gray, img_ref_gray); % 定位互相关结果的峰值坐标 [~, imax] = max(abs(c(:))); [ypeak, xpeak] = ind2sub(size(c), imax(1)); % 换算实际偏移量 offset_y = ypeak - size(img_offset_gray, 1); offset_x = xpeak - size(img_offset_gray, 2);
输出参数说明:
offset_x为x轴方向偏移量,正值代表偏移图像相对参考图像向右偏移,负值代表向左偏移offset_y为y轴方向偏移量,正值代表偏移图像相对参考图像向下偏移,负值代表向上偏移
- 第三步:结果验证(可选)
可以用计算得到的偏移量对偏移图像做平移,和参考图像对比验证对齐效果:
% 按计算得到的偏移量平移偏移图像 img_corrected = imtranslate(img_offset, [offset_x, offset_y]); % 展示对齐前后的对比效果 figure; subplot(1,3,1); imshow(img_ref); title('参考图像'); subplot(1,3,2); imshow(img_offset); title('原始偏移图像'); subplot(1,3,3); imshow(img_corrected); title('对齐后图像');
注意事项
上述方法仅适用于两幅图像仅存在平移偏差的场景,如果图像同时存在旋转、缩放等其他变换,需要先提取SIFT/ORB等特征点做匹配,再求解单应性矩阵分解得到偏移参数。
参考图像


内容的提问来源于stack exchange,提问作者Nir
相关产品推荐
相关产品推荐

