距离及其近似计算

本文介绍两种在计算资源受限情况下的距离逼近方法:利用八边形逼近和斜面距离逼近,用于替代开方运算密集的欧式距离计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

距离及其近似计算


1.导读
本文简要推导在一些需要计算距离,计算资源又不提供开平方运算的情况下,如何逼近常用的欧式距离?
在泛函分析中,距离通常由范数诱导,因此在信号处理中常用的距离为基于LpLp范数的距离,这里给出LpLp范数的定义。

d(p1,p2)=(x1x2)p+(y1y2)p)pd(p1,p2)=(x1−x2)p+(y1−y2)p)p

通常的欧式距离,即为取p=2p=2的一个特例
d(p1,p2)=(x1x2)2+(y1y2)2)d(p1,p2)=(x1−x2)2+(y1−y2)2)

在ISP的pipeline或者其他通过ASIC逻辑电路来计算距离的计算系统中,开方运算功耗较大,需要较大的面积,因此常常采用基于L1L1范数的距离度量,也即棋盘距离:
d(p1,p2)=|x1x2|+|y1y2|d(p1,p2)=|x1−x2|+|y1−y2|

对于lens shading correction或者沿径向去噪等对距离要求较高应用,需要对欧式距离有一个很高精度的逼近,因此需要考虑对欧式距离进一步逼近。

2.具体内容
这里提供两种对欧式距离逼近的策略。
2.1 采用两个正方形及其旋转组合成的八边形逼近
八边形示意图如下:
这里写图片描述

原理与解释:

d(p1,p2)=x1x2oct=|x1x2|+|y1y2|2max(|x1x2|,|y1y2|),|x1x2|>|y1y2|tan22.5&&|y1y2|>|x1x2|tan22.5,otherwised(p1,p2)=‖x1−x2‖oct={|x1−x2|+|y1−y2|,|x1−x2|>|y1−y2|tan22.5&&|y1−y2|>|x1−x2|tan22.52max(|x1−x2|,|y1−y2|),otherwise

推导过程:
这里写图片描述

如上图所示:八边形分为蓝色和红色部分,以第一象限为例:蓝色部分点在直线|x|+|y|=2l|x|+|y|=2l,蓝色部分到八边形中心的距离为:

dblue=|x0|+|y0|=|x|+|y|=2ldblue=|x−0|+|y−0|=|x|+|y|=2l

红色部分:

{|x||y|=l=l,when|x|>|y|,when|y|>|x|{|x|=l,when|x|>|y||y|=l,when|y|>|x|

要使红色部分到中心的距离和蓝色部分到中心的距离相等

dred=dblue=2l=2max(|x|,|y|)dred=dblue=2l=2max(|x|,|y|)

从而八边形距离公式如本部分开始所述。

示例代码(MATLAB)

function d = L2_distance_oct(x1, y1, x2, y2)

dx_abs = abs(x1 - x2);
dy_abs = abs(y1 - y2);

if ( dx_abs > dy_abs * tand(22.5) ) && ( dy_abs > dx_abs * tand(22.5) )
  d = dx_abs + dy_abs;
else
  d = sqrt(2) * max(dx_abs, dy_abs);
end


end

2.2 斜面距离逼近

斜面距离示意图如下:
这里写图片描述

原理与解释:
斜面距离是对邻域中欧式距离的整数近似。从像素pp到其4-邻域的像素只需要水平移动或者垂直移动(称为a-move)。因为所有移动根据对称或旋转都是相等的,对离散距离的唯一可能的定义就是d4距离,其中a=1a=1。从像素pp到其8-邻域的像素不仅有水平移动或垂直移动,还有对角移移动(称为b-move)。同时考虑这两种移动,可把斜面距离记为da,b。最自然的bb值为2a,但是为了计算的简单和减少存储量,将aa值和b值都取整数。最常用的一组值是a=3a=3b=4b=4。这组值可如下获得。考虑像素p1p1p2p2之间在水平方向相差的像素个数为nxnx,在垂直方向相差像素个数为nyny(不失一般性,设nx>nynx>ny),则像素p1p1p2p2之间的斜面距离为

D(p1,p2)=(nxny)a+nybD(p1,p2)=(nx−ny)a+nyb

它与欧式距离之差为:
ΔD(p1,p2)=n2x+n2y[(nxny)a+nyb]ΔD(p1,p2)=nx2+ny2−[(nx−ny)a+nyb]

如果取a=1a=1b=2b=2,将ΔD(p1,p2)ΔD(p1,p2)nyny求导数得
ΔD(p1,p2)=nyn2x+n2y(21)ΔD′(p1,p2)=nynx2+ny2−(2−1)

令导数为零,计算ΔD(p1,p2)ΔD(p1,p2)的极值可得
ny=(21)/2nxny=(2−1)/2nx

即两距离之差ΔD(p1,p2)ΔD(p1,p2)在满足上式时区最大值((21)/21)nx0.09nx((2−1)/2−1)nx≈−0.09nx(此时直线与横轴间夹角为24.524.5∘)。进一步可证明当b=1/21/2+(21/21)=1.351b=1/21/2+(21/2−1)=1.351ΔD(p1,p2)ΔD(p1,p2)的最大值可达到最小。因为4/31.334/3≈1.33,随意斜面距离取a=3a=3b=4b=4
此时斜面距离的计算公式为:
D(p1,p2)={(nxny)×3+ny×4(nynx)×3+nx×4,whennx>ny,otherwiseD(p1,p2)={(nx−ny)×3+ny×4,whennx>ny(ny−nx)×3+nx×4,otherwise

示例代码(MATLAB)
function d = L2_distance_slope(x1, y1, x2, y2)

dx_abs = abs(x1 - x2);
dy_abs = abs(y1 - y2);

if dx_abs > dy_abs
  d = (dx_abs - dy_abs) * 3 + 4 * dy_abs;
else
  d = (dy_abs - dx_abs) * 3 + 4 * dx_abs; 
end

end

综上,本文提供了两种对L1L1的距离的菱形区域的改进方案,为需要对图像沿半径进行区域划分提供了不同的选择,根据计算资源选择对应的方案。
这里写图片描述

参考文献:
1.图像工程(中册),第三版,p10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值