比较两个相等的数组,但isequal()函数在Matlab中返回0

时间:2019-05-26 15:01:05

标签: matlab video

我有两个视频,并将它们转换为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函数不返回任何差异。

1 个答案:

答案 0 :(得分:2)

根据setdiffisequal可以返回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');