Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 两幅图像之间的差异_Image_Matlab_Image Processing_Matrix - Fatal编程技术网

Image 两幅图像之间的差异

Image 两幅图像之间的差异,image,matlab,image-processing,matrix,Image,Matlab,Image Processing,Matrix,我有两张大小为200x400的图像A和B。两幅图像中的像素(单元格值)的值范围仅为1-20A是在每个像素中具有正确值的正确图像。我想做的是检查图像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

我有两张大小为200x400的图像
A
B
。两幅图像中的像素(单元格值)的值范围仅为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
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
B
是这样的:

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
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
的行,因为这是我给出的简单示例):

因此,在图像
A
中,有20个像素的值
1
,但图像
B
中相应的像素有12个1、2个2、3个4、1个5、1个7和1个8

因此,该矩阵
C
将以行数像素中每个列数的出现次数逐行填充

因此,如果有人能建议如何在Matlab中实现这一点,也请告诉我是否需要更多的澄清。

这可以通过以下方式实现:

或者更简单地使用以下累积能力:


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

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


谢谢你的回答。我两个都试过了,但稀疏的一个不行。可能是因为在矩阵B中,一些像素的背景值为零?如果我将
N
设置为
21
,accumarray解决方案会起作用,但结果将是
21x21
,并且由于这一额外的行和列,我不确定哪些行是零值或结果代表什么。因此,如果您能告诉我,我在运行accumarray解决方案时注意到的另一件事是,有时
结果
将是
21x1
,但其中一个单元格将是
1x21
,其余的都是正常的
21x1
,我不知道为什么会发生这种情况。@shepherd请参阅编辑后的答案,哪个解决了这两个问题我仍然存在这样的问题,其中一些行被切换为
1x21
,而不是
21x1
,更正后我无法重现该问题。我认为,
重塑(…)
解决了这个问题。您能否发布导致问题的最小
A
B
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));