Python欧几里得距离变换

这篇具有很好参考价值的文章主要介绍了Python欧几里得距离变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

欧氏距离变换

edt,即Euclidean distance transform.,欧氏距离变换。对于一个二值矩阵 A A A,元素 a ∈ A a\in A aA,则 edt ⁡ ( a ) \operatorname{edt}(a) edt(a) a a a到矩阵中0元素的最短距离。假设现有一矩阵

A = [ 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0 1 1 1 0 0 1 1 0 0 ] A = \begin{bmatrix} 0&1&1&1&1\\ 0&0&1&1&1\\ 0&1&1&1&1\\ 0&1&1&1&0\\ 0&1&1&0&0 \end{bmatrix} A= 0000010111111111111011100

B = edt ⁡ ( a ) B=\operatorname{edt}(a) B=edt(a),则

  • 对于 A 11 A_{11} A11而言,由于其本身为0,则对应的 B 11 = 0 B_{11}=0 B11=0
  • A 12 = 1 A_{12}=1 A12=1,距离 A 12 A_{12} A12最近的0在 A 11 A_{11} A11 A 22 A_{22} A22处,相隔均为1,所以 B 12 = 1 B_{12}=1 B12=1
  • A 13 = 1 A_{13}=1 A13=1,距离 A 13 A_{13} A13最近的0在 A 22 A_{22} A22处,由于在左下角,故距离为 1 + 1 = 2 \sqrt{1+1}=\sqrt{2} 1+1 =2 ,即 B 12 = 2 B_{12}=\sqrt{2} B12=2

以此类推,得到

B = [ 0. 1. 2 5 3. 0. 0. 1. 2. 2. 0. 1. 2 2 1. 0. 1. 2 1. 0. 0. 1. 1. 0. 0. ] B = \begin{bmatrix} 0.&1.&\sqrt{2}&\sqrt{5}&3.\\ 0.&0.&1.&2.&2.\\ 0.&1.&\sqrt{2}&\sqrt{2}&1.\\ 0.&1.&\sqrt{2}&1.&0.\\ 0.&1.&1.&0.&0. \end{bmatrix} B= 0.0.0.0.0.1.0.1.1.1.2 1.2 2 1.5 2.2 1.0.3.2.1.0.0.

distance_transform_edt

scipy.ndimage中,distance_transform_edt可计算欧式变换,

from scipy import ndimage
import numpy as np
a = np.array(([0,1,1,1,1],
              [0,0,1,1,1],
              [0,1,1,1,1],
              [0,1,1,1,0],
              [0,1,1,0,0]))

ndimage.distance_transform_edt(a)
'''
array([[0.        , 1.        , 1.41421356, 2.23606798, 3.        ],
       [0.        , 0.        , 1.        , 2.        , 2.        ],
       [0.        , 1.        , 1.41421356, 1.41421356, 1.        ],
       [0.        , 1.        , 1.41421356, 1.        , 0.        ],
       [0.        , 1.        , 1.        , 0.        , 0.        ]])
'''

其完整定义为

distance_transform_edt(input, sampling=None, return_distances=True, return_indices=False, distances=None, indices=None)

其参数含义为

  • sampling 网格间距,相当于 B B B乘以一个系数
  • return_distancesTrue时返回距离矩阵
  • return_indicesTrue时返回特征变换矩阵
  • distances, indices 用于指针传参的数组,不用管

其他距离变换函数

scipy.ndimage除了edt之外,还提供了另外两个距离变换函数

istance_transform_bf(input, metric='euclidean', sampling=None, return_distances=True, return_indices=False, distances=None, indices=None)
distance_transform_cdt(input, metric='chessboard', return_distances=True, return_indices=False, distances=None, indices=None)

二者和edt相比,多了个metric函数,其中bf可选三种euclidean, taxicab, chessboardcdteuclidean选项。二者其他区别主要是采用的算法不同。

这三种不同的metric在计算距离时采用的方案不同

  • euclidean 即前面提到的欧几里得距离
  • chessboard 会将对角线的距离算作1,而非 2 \sqrt2 2
  • taxicab 类似于曼哈顿距离,不处理对角线

二者差异如下文章来源地址https://www.toymoban.com/news/detail-460102.html

>>> ndimage.distance_transform_bf(a,'chessboard')
array([[0, 1, 1, 2, 3],
       [0, 0, 1, 2, 2],
       [0, 1, 1, 1, 1],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 0, 0]], dtype=uint32)
>>> ndimage.distance_transform_bf(a,'taxicab')
array([[0, 1, 2, 3, 3],
       [0, 0, 1, 2, 2],
       [0, 1, 2, 2, 1],
       [0, 1, 2, 1, 0],
       [0, 1, 1, 0, 0]], dtype=uint32)
>>>

到了这里,关于Python欧几里得距离变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [数论第二节]欧拉函数/快速幂/扩展欧几里得算法

    欧拉函数 (varphi(N)) : 1-N中与N互质的数的个数 若 (N = p_1^{a_1} · p_2^{a_2} · p_3^{a_3} ··· ·p_n^{a_n}) 其中p为N的所有质因子 则 (varphi(N) = N(1-frac{1}{p_1})(1-frac{1}{p_2})···(1-frac{1}{p_n})) 证明: 互质:两数的公共因子只有1 去掉所有与N有(大于1的)公共因子的数,剩下的数就是与

    2024年02月14日
    浏览(48)
  • 数论 --- 约数和定理公式推导、最大公约数、欧几里得算法

    和试除法判断一个数是不是质数是一个道理 从小到大枚举所有的约数,如果当前数能整除这个数的话,说明这个数就是当前数的约数 优化,与试除法判断质数是一样的 如果 d 是 n 的约数,n / d 也一定能整除 n,一个数的约数也一定是成对出现的,在枚举的时候也可以只枚举

    2023年04月08日
    浏览(83)
  • 【非欧几里得域信号的信号处理】使用经典信号处理和图信号处理在一维和二维欧几里得域信号上应用低通滤波器研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 算例1 2.2 算例2 2.3 算例3  2.4 算例4 

    2024年02月13日
    浏览(65)
  • 【算法基础 & 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理)

    原文链接 首先,在算法竞赛中,很多情况下会遇到数值很大的数据,这个时候,题目往往会让我们对某个数去摸,来控制数据范围。 在±*运算中,我们可以对每个数单独取模,然后再对运算之后的数取模。 但是除法比较特殊,例如: ( 40 ÷ 5 ) m o d 10 ≠ ( ( 40 m o d 10 ) ÷ ( 5

    2024年01月23日
    浏览(48)
  • 【抽象代数】素理想、极大理想、唯一析因环、主理想整环、欧几里得环

    设 R R R 是一个环, I I I 是 R R R 的理想,若 a b ∈ I ⇒ a ∈ I abin I Rightarrow a in I a b ∈ I ⇒ a ∈ I 或 b ∈ I b in I b ∈ I ,则称 I I I 是素理想。 例: 整数环 p p p (由元素p生成的主理想), 若p是素数,且 a b ∈   p ab in p a b ∈   p ,则 p ∣ a b p | ab p ∣ a b , p ∣ a 或 p ∣

    2024年02月09日
    浏览(52)
  • 快乐地谈谈:关于RSA算法中求私钥d的欧几里得方法(辗转相除法)考试向的欸

    关于RSA算法本身,就提及一下,它是属于非对称密码体制. 基本的加密方式就如下图所示: c为加密后的密文,m为加密前的明文 其中一般会给出公开密钥n、e的值,这样根据规则,便可以实现加密过程。而题目往往需要进行解密,那么就需要 先求解出p、q,随后再求解出私钥

    2024年02月04日
    浏览(38)
  • 一文看懂什么是欧几里得算法!多图演示辗转相除算法究竟是什么!为什么要这样开展!多图预警!

    ps:全文图片均为手绘,如果有不标准的地方还望谅解,之后会慢慢熟悉画图工具的,感谢感谢!!! 欧几里得算法 又称为 辗转相除法 ,是指用于计算两个非负整数a,b的最大 公约数 。 两个整数的最大公约数是指能够同时整除它们的最大的正整数。 辗转相除法能够实现效

    2024年02月02日
    浏览(47)
  • 欧氏距离 VS 余弦距离

    欧氏距离和余弦距离都是衡量向量之间相似度的常用指标,它们各自适用于不同的场景和有各自的优缺点。 欧氏距离 欧氏距离是指两个向量在n维空间中的距离,它的计算公式为: d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x,y) = sqrt{sum_{i=1}^{n}(x_i - y_i)^2} d ( x , y ) = i = 1 ∑ n ​ ( x

    2024年02月08日
    浏览(41)
  • 【机器学习:欧氏距离 】机器学习中欧氏距离的理解和应用

    在数学中,\\\'欧氏距离’是指欧氏空间中任意两点之间的直线距离。这种距离可以通过应用勾股定理来计算,利用两点的笛卡尔坐标确定它们之间的直线距离,因此有时被称为‘勾股定理距离’。 这些名字来自古希腊数学家欧几里得和毕达哥拉斯。在以欧几里得几何原理为代

    2024年01月22日
    浏览(42)
  • 欧氏距离聚类算法(仅供学习使用)

    欧氏距离聚类算法(Euclidean Distance Clustering Algorithm)是一种基于欧氏距离的聚类算法,其思想是将样本空间中距离比较近的样本点归为一类,距离较远的样本点归为不同的类。该算法是一种层次聚类算法,因为其生成的聚类结果可以表示为一棵树状结构(称为聚类树或者谱树

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包