赞
踩
任务:在下面两幅图像中找不同,并将不同之处标出来。提示:两幅图像没有对齐(有一定的平移量);首先通过算法对齐图像。
使用图像的互相关来找到图像之间的平移量。图像的互相关是一种用于比较两幅图像之间相似度的数学操作。互相关首先将两幅图像转换为灰度图像,以便进行灰度级别的比较。对其中一幅图像进行翻转操作。将翻转后的图像与另一幅图像进行卷积,计算在每个位置上的像素值的乘积之和。得到的互相关结果矩阵表示了两幅图像在不同位置上的相似度。
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中,结果如下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。