从图像中消除背景噪音

fla*_*hon 4 wolfram-mathematica image-processing

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

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

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

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

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

每种方法都会产生不同的结果.

Mat*_*sio 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
Run Code Online (Sandbox Code Playgroud)

但是整数数据类型的图像不是这种情况.这是因为只有正值可以存储在这些图像中,减法的负面结果会在输出图像中被剪切为零:

int1 = Image[RandomInteger[255, {10, 10}], "Byte"];
int2 = Image[RandomInteger[255, {10, 10}], "Byte"];
Run Code Online (Sandbox Code Playgroud)

这仍然是True:

ImageData[ImageDifference[int1, int2]]
== Abs[ImageData[int1] - ImageData[int2]]
Run Code Online (Sandbox Code Playgroud)

但是这两者因剪裁而不同:

ImageData[ImageDifference[int1, int2]]
== Abs@ImageData[ImageSubtract[int1, int2]]
Run Code Online (Sandbox Code Playgroud)

将两个输入图像转换为"Real"或"Real32"数据类型时,会有更少的令人费解的结果.