fla*_*hon 4 wolfram-mathematica image-processing
我有两张照片.第一个是背景噪声+内容,第二个是背景噪声.我想从第一个图像中减去第二个图像以从内容中删除噪声.图像为灰度.
我对处理这个问题的各种方法以及mathematica中灰度值的处理感到困惑.
1)首先,我们可以使用ImageSubtract[imageOne, imageTwo]
.
2)通过使用ImageDifference[imageOne, imageTwo]
,我们避免使用负像素值,但在使用时我们必须使用负像素的地方图像是人为的ImageSubtract
.
3)我们使用得到每个像素的值ImageData
,减去每个对应的值,然后使用显示结果Image
.
每种方法都会产生不同的结果.
对于具有实际数据类型的图像,像素值可以是负数,并且这三个操作是等效的:
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"数据类型时,会有更少的令人费解的结果.