Matlab数字图像处理-图像对齐

发布于:2024-04-23 ⋅ 阅读:(26) ⋅ 点赞:(0)

任务:在下面两幅图像中找不同,并将不同之处标出来。提示:两幅图像没有对齐(有一定的平移量);首先通过算法对齐图像。

  • 算法原理

使用图像的互相关来找到图像之间的平移量。图像的互相关是一种用于比较两幅图像之间相似度的数学操作。互相关首先将两幅图像转换为灰度图像,以便进行灰度级别的比较。对其中一幅图像进行翻转操作。将翻转后的图像与另一幅图像进行卷积,计算在每个位置上的像素值的乘积之和。得到的互相关结果矩阵表示了两幅图像在不同位置上的相似度。

  • 解题步骤

1.将两幅图像转换为灰度图像,使用rgb2gray函数将彩色图像转换为灰度图像。

2.计算第一幅图像和第二幅图像之间的互相关函数。使用normxcorr2函数计算两幅灰度图像的归一化互相关函数,计算它们之间的相似度。

3.找到互相关函数的峰值,即找到最大值和其对应的位置。max函数用于找到互相关函数矩阵corrMatrix中的最大值maxValue,maxIndex用于记录最大值的索引。使用ind2sub函数将最大值的索引转换为行列坐标,得到maxRow和maxCol。

4.计算平移量,将第二幅图像平移使其与第一幅图像对齐。平移量的计算是通过将最大值的坐标减去第二幅图像的大小得到的。

5.使用imtranslate函数对第二幅图像进行平移变换,将其与第一幅图像对齐。

根据找到的峰值位置计算平移量。平移量可以表示为在水平和垂直方向上的像素偏移量。

6.计算图像1和对齐后的图像2的差异,显示在图形窗口中。

  • 程序代码
clc;

clear all;

close all;

% 读取两幅图像

image1 = imread('q1_painting_1.jpg');

image2 = imread('q1_painting_2.jpg');

% 将图像转换为灰度图像

grayImage1 = rgb2gray(image1);

grayImage2 = rgb2gray(image2);

% 计算归一化互相关函数

corrMatrix = normxcorr2(grayImage2, grayImage1);

% 找到互相关函数的峰值

[maxValue, maxIndex] = max(corrMatrix(:));

[maxRow, maxCol] = ind2sub(size(corrMatrix), maxIndex);

% 计算平移量

shiftRow = maxRow - size(grayImage2, 1);

shiftCol = maxCol - size(grayImage2, 2);

% 应用平移变换对齐图像

alignedImage2 = imtranslate(image2, [shiftCol, shiftRow]);

% 显示对齐后的图像

figure;

subplot(1, 2, 1);

imshow(image1);

title('图像1');

subplot(1, 2, 2);

imshow(alignedImage2);

title('对齐后的图像2');

%

I2 = image1-alignedImage2;

figure;

imshow(I2);

title('图像1与图像2的区别');

diffImage = imabsdiff(image1, alignedImage2);

resultImage = image1 + diffImage*20;

figure;

imshow(resultImage);

title('图像1中的差异部分');
  • 处理结果

图1和对齐后的图二如下图所示。

图1和图2之间的像素平移量如下所示。

将图像相减,计算图像1和对齐后的图像2的差异,如下所示。

由于上图显示结果比较暗,看起来不清晰,所以把差异增大,即变亮显示在图1中,结果如下。