【问题标题】:Difference between two images Matlab两个图像之间的差异Matlab
【发布时间】:2015-04-11 18:30:46
【问题描述】:

我有两个图像AB,大小为200x400。两个图像中的像素(单元格值)的值仅在 1-20 之间。 A 是正确的图像,每个像素都有正确的值。我想要做的是检查图像A 中具有每个值(1-20)的像素,并将其与图像B 中的相应值进行比较。例如,我将检查图像A 中具有1 值的像素,然后检查图像B 中的这些像素并检查这些像素具有哪些值(1-20)。然后将对其余值(2-20)执行相同的操作。 之后,我想将结果的混淆矩阵保存在矩阵C中。

所以如果A是这样的:

2 3 4 5 6 7 8
4 1 1 1 1 1 3
3 1 1 1 1 1 6
6 1 1 1 1 1 4
6 1 1 1 1 1 2
2 3 4 5 6 7 8

B是这样的:

2 3 4 5 6 7 8
4 2 1 1 4 1 3
3 4 1 8 1 1 6
6 1 2 7 1 1 4
6 1 1 5 4 1 2
2 3 4 5 6 7 8

我想检查图像A 中具有值1 的像素与矩阵B 中的相同像素。这意味着我要使用的像素是图像 A 中的这个 1 框和图像 B 中的相应像素。

C 看起来像这样(只会填充1 的行,因为这是我给出的简单示例):

   1   2   3   4   5   6   7   8   9 ... 20
1  12  2   0   3   1   0   1   1   0 ...   
2
3
4
5
6
7
8
9
.
.
.
20

所以你可以在图像A 中有 20 个像素的值为1,但图像B 中的相应像素有 12 个 1、2 个 2、3 个 4、1 个 5、1 个 7 和 1 个 8。

所以这个矩阵C 将用行号像素中每个列号的出现次数逐行填充。

因此,如果有人可以请告知如何在 Matlab 中完成此操作,如果需要进一步说明,请告诉我。

【问题讨论】:

    标签: image matlab image-processing matrix


    【解决方案1】:

    这可以通过accumarray来完成:

    N = 20; %// possible pixel values are 1,2,...,N
    result = accumarray(A(:), B(:), [N 1], ...
        @(x){reshape(histc(x, 1:N),[],1)}, {zeros(N,1)});
        %// each cell contains one row of the result matrix
        %// reshape needed because histc may output a row or a column vector
        %// (Note: fill value of accumarray can also be a cell)
    result = [result{:}].'; %'// concatenate all cells into result matrix
    

    或者更简单的使用sparse的积累能力:

    result = full(sparse(A(:), B(:), 1, N, N));
    

    如果像素可能有0 值,只需将1 添加到ABN

    result = accumarray(A(:)+1, B(:)+1, [N+1 1], ...
        @(x){reshape(histc(x, 1:N+1),[],1)}, {zeros(N+1,1)});
    result = [result{:}].';
    

    或者

    result = full(sparse(A(:)+1, B(:)+1, 1, N+1, N+1));
    

    【讨论】:

    • 感谢您的回答。我都试过了,但稀疏的一个不起作用。可能是因为在矩阵 B 中某些像素的背景值为零?如果我将N 设置为21,accumarray 解决方案有效,但结果将是21x21,并且我不确定哪些行是零值或结果代表什么,因为这个额外的行和列。所以如果你能请建议
    • 在运行 accumarray 解决方案时我注意到的另一件事是,有时 result 将是 21x1 但其中一个单元格将是 1x21 其余的都是正常的 21x1,我不知道不知道为什么会这样。
    • @shepherd 查看编辑后的答案,解决了这两个问题
    • 我仍然有这个问题,其中一些行被切换为1x21 而不是21x1
    • 修正后无法重现该问题。我认为reshape(...) 解决了这个问题。你能发布导致问题的最小AB 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多