从图像中去除背景噪声

4
我有两张图片。第一张是背景噪声和内容的组合,第二张只有背景噪声。我想将第二张图像从第一张中减去,以消除内容中的噪声。该图像为灰度图像。
在处理此问题时,我对不同的处理方式以及Mathematica中灰度值的处理感到困惑。
1)首先,我们可以使用ImageSubtract [imageOne,imageTwo]
2)通过使用ImageDifference [imageOne,imageTwo],我们避免了负像素值,但在使用ImageSubtract时会出现人工图像的情况。
3)我们使用ImageData获取每个像素的值,减去每个相应的值,然后使用Image显示结果。
这些方法中的每一个都产生不同的结果。

3
请将您的图片上传到其他地方... - Dr. belisarius
1个回答

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”数据类型时,会减少令人困惑的结果。


1
比我的更完整,我已经将我的删除了,因为它是多余的。 - acl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接