Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math “处理”;除零“;在图像处理(或PRNU估计)中_Math_Image Processing_Numeric_Division_Divide By Zero - Fatal编程技术网

Math “处理”;除零“;在图像处理(或PRNU估计)中

Math “处理”;除零“;在图像处理(或PRNU估计)中,math,image-processing,numeric,division,divide-by-zero,Math,Image Processing,Numeric,Division,Divide By Zero,我有下面的等式,我试着去实现。接下来的问题不一定是关于这个等式,而是关于如何在图像处理中处理零除: 这里,I是图像,W是图像与其去噪版本之间的差异(因此,W表示图像中的噪声),而K是从同一相机的d图像中获得的估计指纹。所有的计算都是像素级的;因此方程不涉及矩阵乘法。有关估计数字指纹的更多信息,请参阅相应的文献,如通用或通用 然而,当一幅图像的像素值为零时,我的问题就出现了,例如,完美黑色(假设我们只有一幅图像,k=1,因此如果下一个像素值不等于零,那么零不会被下一幅图像的像素值偶然覆盖)。然后

我有下面的等式,我试着去实现。接下来的问题不一定是关于这个等式,而是关于如何在图像处理中处理零除:

这里,
I
是图像,
W
是图像与其去噪版本之间的差异(因此,
W
表示图像中的噪声),而
K
是从同一相机的
d
图像中获得的估计指纹。所有的计算都是像素级的;因此方程不涉及矩阵乘法。有关估计数字指纹的更多信息,请参阅相应的文献,如通用或通用

然而,当一幅图像的像素值为零时,我的问题就出现了,例如,完美黑色(假设我们只有一幅图像,
k=1
,因此如果下一个像素值不等于零,那么零不会被下一幅图像的像素值偶然覆盖)。然后我有一个除以零的除法,这显然是没有定义的

我怎样才能克服这个问题?我想出的一个选择是在我开始计算之前,向所有像素添加
+1
。但是,这会将像素值的范围从
[0 | 255]
移动到
[1 | 256]
,从而无法使用数据类型
uint8

其他作者在我读到的这篇论文中,往往不考虑价值接近范围的边界。例如,它们只计算像素值的方程
[5 | 250]
。他们的理由不是因为数字问题,而是说,如果一幅图像是完全饱和的,或者是完全黑色的,指纹甚至无法在该区域正确估计


不过,我主要关心的不是该算法的最佳性能,而是总的来说:如何在图像处理中处理0的除法?

一个解决方案是使用减法而不是除法;然而减法不是尺度不变的,它是平移不变的

[例如,比率将始终是介于0和1之间的标准化值;如果比率超过1,则可以将其反转;在减法中可以使用相同的标准化,但需要找到变量获得的最大值]

最终你将不得不处理分裂问题。将黑色图像与其自身分开是一个合适的主题-您可以将这些值转换到其他范围,然后再转换回来


然而,5/8与55/58并不相同。所以你只能用相对论的方法来理解。如果你想知道确切的比率,你最好坚持原来的时间间隔,并将其作为特例处理。e、 如果denom==0,用它做点什么;如果num==0,denom==0,这意味着我们有一个恒等式——这就好像我们有1/1一样。

一个解决方案是使用减法而不是除法;然而减法不是尺度不变的,它是平移不变的

[例如,比率将始终是介于0和1之间的标准化值;如果比率超过1,则可以将其反转;在减法中可以使用相同的标准化,但需要找到变量获得的最大值]

最终你将不得不处理分裂问题。将黑色图像与其自身分开是一个合适的主题-您可以将这些值转换到其他范围,然后再转换回来


然而,5/8与55/58并不相同。所以你只能用相对论的方法来理解。如果你想知道确切的比率,你最好坚持原来的时间间隔,并将其作为特例处理。e、 如果denom==0,用它做点什么;如果num==0和denom==0 0/0,这意味着我们有了一个身份——这与我们有1/1完全一样。

在PRNU和指纹估计中,如果你检查Jessica Fridrich的网页中的matlab实现,他们基本上创建了一个遮罩,以消除你提到的饱和和低强度像素。然后,他们将图像矩阵转换为单个(I),使图像成为32位浮点。将1添加到图像并进行分割

对于您的一般问题,在图像处理中,我喜欢创建遮罩,并只添加一个零值像素值

img=imread('my gray img');
a_mat=rand(size(img));

mask=uint8(img==0);
div= a_mat/(img+mask);

这将防止零误差除法。(未经测试,但应能正常工作)

在PRNU和指纹估计中,如果您查看Jessica Fridrich网页中的matlab实现,他们基本上创建了一个遮罩,以消除您提到的饱和和低强度像素。然后,他们将图像矩阵转换为单个(I),使图像成为32位浮点。将1添加到图像并进行分割

对于您的一般问题,在图像处理中,我喜欢创建遮罩,并只添加一个零值像素值

img=imread('my gray img');
a_mat=rand(size(img));

mask=uint8(img==0);
div= a_mat/(img+mask);

这将防止零误差除法。(未测试,但应能正常工作)

您能澄清一下“I_k是图像”是什么意思吗?图像的数学模型是什么?它是2D矩阵。例如,矩阵中的每个条目对应于图像中的一个像素;因此矩阵维数等于图像的分辨率。尽管要记住,数学并不遵循常规的“矩阵计算规则”,因为所有操作都是按元素进行的(例如,取I_k(x,y)的一个像素,然后将其与分子中的W_k(x,y)相乘),正如我所想的那样。那么除以矩阵之和是什么意思呢?好吧,让我们只考虑(x,y)处的一个特定像素,只有一个图像(d=1),那么这归结为:I_k(x,y)*W_k(x,y)/I_k(x,y)^2。现在,如果I_k(x,y)是0,那么我们将除以0…你能澄清一下“I_k是图像”是什么意思吗?图像的数学模型是什么?它是2D矩阵。例如,矩阵中的每个条目对应于图像中的一个像素;因此矩阵维数等于图像的分辨率。尽管要记住,数学并不遵循常规的“矩阵计算规则”,因为所有操作都是按元素进行的(取I_k(x)的一个像素)