我有两张照片。第一个是背景噪声+内容,第二个是背景噪声。我想从第一个图像中减去第二个图像以从内容中删除噪声。图像为灰度。
我对处理此问题的各种方法以及mathematica中灰度值的处理感到困惑。
1)首先,我们可以使用ImageSubtract[imageOne, imageTwo]
。
2)通过使用ImageDifference[imageOne, imageTwo]
,我们避免使用负像素值,但在使用ImageSubtract
时我们必须使用负像素的地方图像是人为的。
3)我们使用ImageData
获取每个像素的值,减去每个对应的值,然后使用Image
显示结果。
这些方法中的每一种都会产生不同的结果。
答案 0 :(得分:6)
对于具有实际数据类型的图像,像素值可以是负数,并且这三个操作是等效的:
real1 = Image[RandomReal[1, {10, 10}]];
real2 = Image[RandomReal[1, {10, 10}]];
ImageData[ImageDifference[real1, real2]] ==
Abs@ImageData[ImageSubtract[real1, real2]] ==
Abs[ImageData[real1] - ImageData[real2]]
Out[4]= True
但整数数据类型的图像并非如此。这是因为只有正值可以存储在这些图像中,减法的负面结果会在输出图像中被剪切为零:
int1 = Image[RandomInteger[255, {10, 10}], "Byte"];
int2 = Image[RandomInteger[255, {10, 10}], "Byte"];
这仍然是True
:
ImageData[ImageDifference[int1, int2]]
== Abs[ImageData[int1] - ImageData[int2]]
但是这两者因剪裁而不同:
ImageData[ImageDifference[int1, int2]]
== Abs@ImageData[ImageSubtract[int1, int2]]
将两个输入图像转换为“Real”或“Real32”数据类型时,会有更少的令人费解的结果。