我有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传感器的波传播始于图像的底部
可能这不是你问题的完整答案,但我希望我能给你一些进一步研究的想法。但在此之前,我不得不提一下:图像处理是二维信号处理! ;-)
在第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 = 5
的结果:
s = 10
的结果:
如你所见,[160,200]周围有一个明显的变化。我还计算了第一个和第二个导数,因为在这里你也可以看到你的“音量”中的更改 - 如果你感兴趣的话。
如果您需要我的脚本的进一步解释或者您需要进一步的帮助,请告诉我。