MATLAB图像区分/比较

问题描述 投票:0回答:1

我有1024个图像,每个图像的大小为150(y)x 270(x),存储为3D数组,大小为150 x 270 x 1024

前160幅图像彼此非常相似但不完全相同;

但是,在第160张图像之后,图像开始急剧变化。

所以,这就是我想要实现的目标:

我想找到图像开始急剧变化的图像索引

我试图比较图像#1和其他1023图像之间的相关性:

for ii = 1:1023
    R(ii) = corr2(input(:,:,1),input(:,:,ii+1)); % input = 3D array (150 x 270 x 1024)
end

并查看第160幅图像的相关系数是否有任何变化,但未成功。

我可以使用什么方法来检测这些图像中的变化,并找到我的图像开始发生显着变化的索引?

编辑

以下是我的一些图像(标题中的索引)

我猜这个变化没有我最初描述的那么戏剧化,当你看到图像160和161时,变化是微妙的,但随着它的继续,你可以清楚地看到图像肯定在底部变化

这些图像是超声波测试的结果,PZT传感器的波传播始于图像的底部

enter image description here enter image description here enter image description here enter image description here enter image description here

image matlab comparison
1个回答
1
投票

可能这不是你问题的完整答案,但我希望我能给你一些进一步研究的想法。但在此之前,我不得不提一下:图像处理是二维信号处理! ;-)

在第34次(或左右)阅读你的问题后,我终于看到,你正在将“图像”#1与其他所有人进行比较。相反,你应该比较相邻的“图像”。我整理了以下脚本,并结合使用corr2的方法:

load('fullSet.mat');

%% Normalize values to [0, 1] with respect to whole volume. 
%% Just for nicer image showing.
%minV = min(fullSet(:));
%fullSet = fullSet - minV;
%maxV = max(fullSet(:));
%fullSet = fullSet / maxV;

% Determine number of "images".
n = size(fullSet, 3);

% "Step size".
s = 1;

% Initialize R.
R = zeros(n-s, 1);

% Compute correlation coefficients.
for ii = 1:n-s
    R(ii) = corr2(fullSet(:, :, ii), fullSet(:, :, ii + s));
end

% Show output.
figure(1);

subplot(3, 1, 1);
plot(1:n-s, R);
title('R');
xlim([0 n-s]);

subplot(3, 1, 2);
plot(1:n-s-1, diff(R, 1));
title('1st derivative of R');
xlim([0 n-s-1]);

subplot(3, 1, 3);
plot(1:n-s-2, diff(R, 2));
title('2nd derivative of R');
xlim([0 n-s-2]);

“步长”定义哪个“图像”应与当前“图像”进行比较,即s = 1用于比较当前“图像”与下一个“图像”,s = 2用于比较当前“图像”与第二个“图像”。下一个“图像”,依此类推。

s = 1的结果:

s = 1

s = 5的结果:

s = 5

s = 10的结果:

s = 10

如你所见,[160,200]周围有一个明显的变化。我还计算了第一个和第二个导数,因为在这里你也可以看到你的“音量”中的更改 - 如果你感兴趣的话。

如果您需要我的脚本的进一步解释或者您需要进一步的帮助,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.