我有两个图像要融合。图像为AB
我已经融合了它们,并得到了这个图像fused现在我想要融合图像F和图像B之间的差异。我已经执行了代码,但没有得到理想的结果
我得到这个图像-〉differencenormalized difference,但我想要这个-〉Required
差分图像的值被归一化到0到1的范围。
使用的代码为
difference=F-B;
figure,imshow(difference);
normImage = mat2gray(difference);
figure,imshow(normImage);
有人能帮忙吗。谢谢。
1条答案
按热度按时间unguejic1#
使用:
我的结果是:
若要了解转换为双精度的重要性,请查看图像中
B(y,x) > F(y,x)
的区域,例如示例图像中的(343, 280)
。数学上,我们期望32 - 107等于-75,但是:
这是因为
F
和B
都是uint8
的数组:作为无符号整数,uint8不能取负值,因此任何试图将负值赋给uint8变量的操作都会导致0。由于两个操作数都是uint8,结果是uint8。在该值已被箝位为0 - 255范围内的值之后,尝试将其强制转换为双精度型,将只会导致值为0的双精度型变量。(在范围的上限也会发生同样的情况。尝试
uint8(444)
。)将
F
和B
转换为带符号类型(一个足够大的类型,范围是-max到+max,或者在本例中是-255到255)将解决数学问题:不过对于图像来说,转换为
double
感觉更自然,在计算和重新缩放时比整数更精确,另外,我们可以使用这个方便的im2double
函数,它不仅可以将数组转换为双精度数,还可以将所有值重新缩放到0和1之间:但是现在当我们试着减去这两个的时候,我们实际上得到了一个负值,就像预期的那样:
因此,
im2double(F)-im2double(B)
为我们提供了-1.0到1.0之间的双精度值。mat2gray
负责将这些值缩放回0.0到1.0的范围以供显示。注意:我非常小心地选择了坐标(343,280),因为这是F-B最负的地方。如果你对转换是如何发生的以及什么值被缩放到什么感兴趣,你也可以看看(53,266)。