从图像中消除背景噪音

时间:2011-07-18 16:17:59

标签: image-processing wolfram-mathematica

我有两张照片。第一个是背景噪声+内容,第二个是背景噪声。我想从第一个图像中减去第二个图像以从内容中删除噪声。图像为灰度。

我对处理此问题的各种方法以及mathematica中灰度值的处理感到困惑。

1)首先,我们可以使用ImageSubtract[imageOne, imageTwo]

2)通过使用ImageDifference[imageOne, imageTwo],我们避免使用负像素值,但在使用ImageSubtract时我们必须使用负像素的地方图像是人为的。

3)我们使用ImageData获取每个像素的值,减去每个对应的值,然后使用Image显示结果。

这些方法中的每一种都会产生不同的结果。

1 个答案:

答案 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”数据类型时,会有更少的令人费解的结果。