我有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传感器的波传播始于图像的底部
答案 0 :(得分: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 = 5
的结果:
s = 10
的结果:
如您所见,[160,200]周围有一个明显的变化。我还计算了一阶和二阶导数,因为在此之后,如果您感兴趣,您还可以在“体积”中看到更改。
如果您需要进一步说明我的脚本或总体上需要其他帮助,请告诉我。