两个图像之间的区别Matlab

时间:2015-04-10 15:35:30

标签: image matlab image-processing matrix

我有两张尺寸为A的{​​{1}}和B图片。两个图像中的像素(单元格值)的值仅为1-20。 200x400是正确的图像,在每个像素中具有正确的值。我想要做的是检查图像A中具有每个值(1-20)的像素,并将其与图像A中的相应值进行比较。例如,我将检查图像B中具有值A的像素,然后检查图像1中的像素并检查这些像素具有的值(1-20) 。然后对剩下的值做同样的事情(2-20)。 之后,我想将结果的混淆矩阵保存在矩阵B中。

所以如果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 中值1的像素,矩阵A中的像素相同。这意味着我要使用的像素是图像B中的1个方框和图像A中的相应像素。

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

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 中有20个像素的值A,但图片1中的相应像素有12个,2个,3个,1个,5个, 1七和八。

因此,这个矩阵B将逐行填充,每个列号的出现次数都在行号像素中。

所以,如果有人可以在Matlab中建议如何做到这一点,如果需要进一步澄清,请告诉我。

1 个答案:

答案 0 :(得分: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));