我有两个视频,并将它们转换为Matlab中的数组。然后将它们转换为每种颜色的三个单独的数组,如下所示:
v = VideoReader('d:\movie_1.avi');
while hasFrame(v)
A = readFrame(v);
r = A(:,:,1);
g = A(:,:,2);
b = A(:,:,3);
end;
v_2 = VideoReader('d:\movie_2.avi');
while hasFrame(v_2)
A_2 = readFrame(v_2);
r_2 = A_2(:,:,1);
g_2 = A_2(:,:,2);
b_2 = A_2(:,:,3);
end;
然后我通过 isequal 函数对它们进行了比较:
comp_r = isequal(r,r_2)
comp_g = isequal(g,g_2)
comp_b = isequal(b,b_2)
所有三个结果均为零,表示错误:
comp_r =
0
comp_g =
0
comp_b =
0
但是当我区别对待它们时,我什么也没得到:
diff_r = setdiff(r,r_2)
diff_g = setdiff(g,g_2)
diff_b = setdiff(b,b_2)
结果是:
diff_r =
Empty matrix: 0-by-1
diff_g =
Empty matrix: 0-by-1
diff_b =
Empty matrix: 0-by-1
我无法理解此测试的行为。 isequal
函数返回false,但是setdiff
函数不返回任何差异。
答案 0 :(得分:2)
根据setdiff,isequal
可以返回0
,而setdiff
可以返回empty
。
C = setdiff(A,B)以重复形式返回A中的数据,而不是B中的数据。 C按排序顺序。
示例:
setdiff([1,2,3], [3,2,1])
返回empty
isequal([1,2,3], [3,2,1])
返回0
您可以尝试以下方法找到区别:
r_max_abs_diff = max(abs(double(r(:)) - double(r_2(:))));
disp(['r_max_abs_diff = ', num2str(r_max_abs_diff)]);
%Display the differences of r and r_2 (with false colors):
figure;imagesc(double(r) - double(r_2));impixelinfo;title('r - r\_2');