精华内容
下载资源
问答
  • 图算法
    万次阅读
    2017-12-26 21:41:07
    作者:July   二零一一年二月十四日。
    参考:
    维基百科、本BLOG 内经典算法研究系列10篇文章。

    博主说明:
    1、本文囊括了图算法领域中的全部20个重要算法,并从中甄选出了此十大算法。
    2、此十大算法的评选是以我个人之见而选,其它虽未囊括于10之内,但都在本文中有所提到。
    -------------------------------------------


    第一章、基本遍历
    一、深度优先搜索
    二、广度优先搜索
    此图遍历中最基本的俩种算法,BFS,DFS,入选本图算法十大算法,自是无可争议。
    因为,这俩种搜索算法,应用实为广泛而重要。

    关于此BFS、DFS算法,更多,请参考:
    经典算法研究系列:四、教你通透彻底理解:BFS和DFS优先搜索算法
    http://blog.csdn.net/v_JULY_v/archive/2011/01/01/6111353.aspx

    三、A*搜索算法
    DFS和BFS在展开子结点时均属于盲目型搜索,也就是说,
    它不会选择哪个结点在下一次搜索中更优而去跳转到该结点进行下一步的搜索。
    在运气不好的情形中,均需要试探完整个解集空间, 显然,只能适用于问题规模不大的搜索问题中。

    A*算法,作为启发式算法中很重要的一种,被广泛应用在最优路径求解和一些策略设计的问题中。
    而A*算法最为核心的部分,就在于它的一个估值函数的设计上:
        f(n)=g(n)+h(n)
    其中f(n)是每个可能试探点的估值,它有两部分组成:
    一部分,为g(n),它表示从起始搜索点到当前点的代价(通常用某结点在搜索树中的深度来表示)。
    一部分,即h(n),它表示启发式搜索中最为重要的一部分,即当前结点到目标结点的估值。

    更多,请参考:
    经典算法研究系列:一、A*搜索算法
    http://blog.csdn.net/v_JULY_v/archive/2010/12/23/6093380.aspx

    附:
    Flood Fill
    LeeMaRS、wtzyb4446
    图形学中Flood Fill是满水法填充,是用来填充区域的。
    就好比在一个地方一直到水,水会往四周满延开,直到高地阻挡。

    Flood Fill就是从一个点开始往四周寻找相同的点填充,直到有不同的点为止。
    我们用的Flood Fill和这个差不多原理,就是BFS的一种形式.

    假设在(i,j)滴好大一滴红墨水,然后水开始漫开,向它的上下左右染色,也就是(i-1,j),(i+1,j),(i,j-1),(i,j+1)这四个点.然后在分别再从这四个点开始向周围染色...直到碰到某种边界为止.

    把这个转化为BFS的思想,就是队列中初始元素是(i,j),然后把(i,j)扩展状态,得到(i-1,j),(i+1,j),(i,j-1),(i,j+1)这四个状态,加入队列.把(i,j)出列,继续扩展下一个结点...如此


    第二章、最短路径算法
    四、Dijkstra
    Dijkstra 算法,又叫迪科斯彻算法(Dijkstra),
    算法解决的是有向图中单个源点到其他顶点的最短路径问题。

    此Dijkstra 算法已在本BLOG内俩篇文章中,有所具体阐述,请参见:
    I、经典算法研究系列:二、Dijkstra 算法初探
    http://blog.csdn.net/v_JULY_v/archive/2010/12/24/6096981.aspx
    II、经典算法研究系列:二之续、彻底理解Dijkstra算法
    http://blog.csdn.net/v_JULY_v/archive/2011/02/13/6182419.aspx

    五、Bellman-Ford
    Bellman-Ford:
    求单源最短路,可以判断有无负权回路(若有,则不存在最短路),
    时效性较好,时间复杂度O(VE)。

    附:
    SPFA:
    是Bellman-Ford的队列优化,时效性相对好,时间复杂度O(kE)。(k<<V)。


    六、Floyd-Warshall
    Floyd-Warshall:求多源、无负权边的最短路。用矩阵记录图。时效性较差,时间复杂度O(V^3)。此算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题。

    更多,请参考:
    几个最短路径算法比较:
    http://blog.csdn.net/v_JULY_v/archive/2011/02/12/6181485.aspx

    附:Kneser图
    Kneser图是与图的分数染色有关的算法。
    给定正整数a,b,a≥2b,Kneser图Ka:b是以如下方式定义的一个图:
    其顶点是从给定的a个元素的集合中选出的b个元素构成的子集,两顶点间有边当且仅当这两个顶点为不交的集合。
     

    第三章、最小生成树
    七、Prim
    八、Kruskal
    此最小(权值)生成树的俩种算法,日后,会在本BLOG内 具体而深入阐述。
     

    第四章、图匹配
    九、匈牙利算法 
    匈牙利算法是众多用于解决线性任务分配问题的算法之一,是用来解决二分图最大匹配问题的经典算法,可以在多项式时间内解决问题,由匈牙利数学家Jack Edmonds于1965年提出。
    这个算法,比较生疏,下面,稍微阐述下:

    I、匈牙利算法应用问题的描述:
    设G=(V,E)是一个无向图。如顶点集V可分区为两个互不相交的子集V1,V2之并,并且图中每条边依附的两个顶点都分属于这两个不同的子集。则称图G为二分图。二分图也可记为G=(V1,V2,E)。

    给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。 选择这样的子集中边数最大的子集称为图的最大匹配问题(maximal matching problem)

    如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备,完美匹配。

    II、算法描述
    求最大匹配的一种显而易见的算法是:先找出全部匹配,然后保留匹配数最多的。但是这个算法的时间复杂度为边数的指数级函数。因此,需要寻求一种更加高效的算法。

    下面介绍用增广路求最大匹配的方法(称作匈牙利算法,匈牙利数学家Edmonds于1965年提出)。
    增广路的定义(也称增广轨或交错轨):
    若P是图G中一条连通两个未匹配顶点的路径,并且属于M的边和不属于M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。

    由增广路的定义可以推出下述三个结论:
    1-P的路径长度必定为奇数,第一条边和最后一条边都不属于M。
    2-将M和P进行异或操作(去同存异)可以得到一个更大的匹配M’。
    3-M为G的最大匹配当且仅当不存在M的增广路径。

    算法轮廓:
    (1)置M为空
    (2)找出一条增广路径P,通过异或操作获得更大的匹配M’代替M
    (3)重复(2)操作直到找不出增广路径为止

    III、时间复杂度与空间复杂度
    时间复杂度
    邻接矩阵:最坏为O(n^3)      邻接表:O(mn)   
    空间复杂度:
    邻接矩阵:O(n^2)            邻接表:O(m+n)

    附:
    Edmonds's matching


    第五章、强连通分支算法与网络流
    十、Ford-Fulkerson
    最大流量算法(Ford-Fulkerson Algorithm),
    也叫做贝尔曼-福特算法,被用于作为一个距离向量路由协议例如RIP, BGP, ISO IDRP, NOVELL IPX的算法。

    附:Edmonds-Karp、Dinic、Push-relabel、maximum flow

    强连通分支算法
    Kosaraju、 Gabow、 Tarjan。
    此类算法,日后阐述。
    完。


    本人July对本博客所有任何文章、内容和资料享有版权。
    转载务必注明作者本人及出处,并通知本人。July、二零一一年二月十四日
    更多相关内容
  • C语言实现(第5部分)图算法(原书第3版).pdf
  • 图算法在反欺诈中的应用

    千次阅读 2020-12-14 10:43:38
    是表示事物之间关联关系的有效方式,包括节点和边。节点是一种实体,可以是账号,也可以是设备、手机号等,而边表示这些节点之间的关联关系,比如某个账号使用过某台设备,就可以在对应的账号和设备节点之间建立一...

    在互联网业务开展的过程中,经常面临着黑产的批量攻击,这种攻击渗透在业务链路的各个环节,如注册、登录、营销、交易等等,团伙欺诈对互联网业务开展构成了巨大威胁。团伙欺诈发生时,同一团伙的账号间会存在或显性或隐性的关联,通过深入挖掘这些关联关系,构建账号间的关系网络,可以将这些欺诈团伙一网打尽。

    图是表示事物之间关联关系的有效方式,包括节点和边。节点是一种实体,可以是账号,也可以是设备、手机号等,而边表示这些节点之间的关联关系,比如某个账号使用过某台设备,就可以在对应的账号和设备节点之间建立一条边。图又可分同构图和异构图,同构图是指图中只有一种类型的节点和一种类型的边,此外是异构图,即节点类型或边的类型超过一种。基于图的算法在反欺诈领域有着广阔的用武之地,在这里我们从3个不同的角度聊下图算法在反欺诈中的应用。

    一、从传统图算法到图神经网络

    就像在机器学习领域可细分为以逻辑回归、决策树为代表的传统机器学习和以卷积神经网络CNN、循环神经网络RNN为代表的深度学习一样,图算法领域可分为传统图算法和图神经网络,这里分开介绍。

    1、传统图算法

    传统图算法在反欺诈领域的典型应用主要包括社区发现算法和图的异常检测算法。社区发现算法的主要作用是根据节点关联的紧密程度将原图拆分成多个子图,子图内部关联紧密,子图之间无关联或关联微弱。通过社区划分后,可以根据社区规模及由社区内部关联构建的指标识别出异常社区即欺诈团伙。典型的社区发现算法有LPA[1]、Louvain[2]和infomap[3]等。这里简单介绍LPA的原理,如图1。在LPA中,每个节点会被分配一个不同的社区编号,然后在此后的迭代中,每个节点的社区编号会由邻居节点即有关联的节点中占据多数的编号所决定,如此迭代直至每个节点的社区编号不再变化。在第一轮迭代中,由于每个邻居节点的社区编号不同,节点会被随机分配一个邻居节点的编号。迭代收敛后,关联紧密的节点会拥有同一个社区编号。

    在这里插入图片描述
    图1 利用LPA进行社区划分


    传统图算法的另一个典型应用是图的异常检测算法,主要是异常结构的检测,典型算法有Fraudar[4]。它是一种针对二部图识别稠密子图的算法。二部图是指图中包括两种类型的节点,算法构建了一种衡量子图密集程度的指标,利用贪心算法找出图中最稠密的子图。该算法可有效识别刷单、虚假评论、洗钱等。

    2、图神经网络算法

    传统图算法具有很强的解释性,在反欺诈领域发挥了重要作用,但也面临着一个痛点:它只能通过节点间的关联关系建模,并不能充分利用节点的特征。如在构建的账号关系网络中,不仅账号之间存在关联关系,账号本身也有自己的特征。早期的图神经网络主要是利用节点的拓扑关系,生成每个节点的嵌入表示即node embedding,然后可以和节点自身特征拼接使用,这样就能利用节点的结构信息和自身特征。典型的节点表示学习算法如deepwalk[5],它首先在图中根据节点的连接关系进行随机游走由节点组成一条路径,这条路径可类比成一句话,每个节点类比成一个单词,这时候可以用NLP中典型的word embedding学习算法skip-gram,为每个节点生成embedding。随着算法的发展,图神经网络算法可以同时考虑节点的关联关系和自身特征,典型的算法有图卷积神经网络GCN[6]。如图2,某节点将其自身节点特征和邻居节点特征进行加权求和后,通过非线性变换得到隐藏表示,然后可用于后续的分类任务。图神经网络算法在考虑节点关联关系基础上,可叠加节点特征,进一步提升了模型的表达能力,在实践中往往有更优秀的表现。

    在这里插入图片描述
    图2 图卷积神经网络GCN


    二、从半监督学习到无监督学习

    在反欺诈建模时,经常面临着没有标签或只有少量标签的情况,所以实际建模时主要采用半监督学习和无监督学习。在半监督学习中,基于已有的部分节点标签,可根据关联关系或叠加节点特征相似对未知节点的标签进行预测,典型的算法如上文提到的GCN。在无监督学习中,像传统图算法中的社区发现是一种应用方式,另外还可以利用无监督图神经网络算法综合节点特征和关联关系进行节点表示学习,节点表示可用于下游聚类任务识别出欺诈团伙。在无监督图神经网络算法中,可利用数据本身构建正负样本进行自监督学习。在DGI算法[7]中,如图3,通过保持邻接矩阵即节点的关联关系不变但打乱节点特征矩阵的方式构建负样本,然后利用区分正负样本的二分类问题得到节点表示。

    在这里插入图片描述
    图3 DGI


    其实有些算法既可以进行半监督学习也可进行无监督学习,比如上文提到的LPA算法,是事先没有标签的一种情况,初始状态每个节点被分配了不同的社区编号,是一种无监督学习的方式。如果事先知道一部分节点的标签,可将这些节点的初始状态定义为相应的标签,然后确定的标签基于关系网络进行传播以识别出更多的风险用户,这是半监督学习的方式。

    三、从静态图到动态图

    目前已有的图算法主要是针对静态图,也就是学习时图中的节点和关联关系保持不变。而在现实世界中,大部分图是动态的,图的节点会随着时间增加,节点间的连接关系也会随着时间改变。最近,基于动态图的表示学习算法吸引了越来越多人的关注。如在算法[8]中,对新加入的节点,通过局部拓扑结构找出受其影响最大的节点,然后利用这些节点合成自身节点表示,并对受影响节点进行局部更新,由此可解决动态图新节点表示生成问题。在反欺诈领域,我们可以通过动态图的形式,更精确地刻画出团伙的演化信息,从而更精确更及时地发现欺诈团伙。

    在这里插入图片描述
    图4 实时流式图表示学习


    在建模过程中,可根据业务对模型可解释性的要求,灵活选用传统图算法或图神经网络,另外还可以根据业务风险标签情况分别采用无监督或半监督的学习方式。相较静态图算法,动态图算法更符合反欺诈的时效性要求,然而目前受限于计算性能难以大规模应用。相信随着计算性能的提升和算法的不断优化,动态图算法在反欺诈领域将会有越来越大的应用空间。


    往期好文推荐:
    2020 ICDM 知识图谱竞赛获奖技术方案
    一文读懂联邦学习的前世今生(建议收藏)
    突破DevOps瓶颈:京东数科自动化测试平台建设实践
    京东数科七层负载 | HTTPS硬件加速 (Freescale加速卡篇)
    京东数科mPaaS:深度解读京东金融App(Android)的秒开优化实践
    在这里插入图片描述

    展开全文
  • 图算法》第五章 中心性算法-1

    千次阅读 2019-08-28 16:50:55
    中心性算法(centrality algorithm)用于理解中特定节点的角色及其对网络的影响。之所以有用,是因为这些算法能够识别最重要的节点,并帮助我们了解群体动态,例如可信度、可访问性、事物传播的速度以及群体之间的...

    对图算法有兴趣的朋友可以关注微信公众号 :《 Medical与AI的故事》

    原文链接:《图算法》第五章-1 中心性算法

    中心性算法(centrality algorithm)用于理解图中特定节点的角色及其对网络的影响。之所以有用,是因为这些算法能够识别最重要的节点,并帮助我们了解群体动态,例如可信度、可访问性、事物传播的速度以及群体之间的桥梁。尽管这些算法中有许多是为社交网路分析而发明的,但它们已经在各种行业和领域中得到了应用。
    我们将介绍以下算法:

    • 度中心性(Degree Centrality)作为连通性的基线度量
    • 紧密中心性(Closeness Centrality)用于测量节点对群体的意义,包括对断开连接群体的两个变体
    • 中介中心性(Betweenness Centrality)用于查找控制点,包括一个近似的估计算法
    • 网页排名(PageRank)用来了解整体性的影响,包括一个个性化的网页排名变体
      不同的中心性算法所用的度量值均不同,因而会在算法之间差生显著的差异结果。当你看到次优答案的时候,最好检查一下你使用的算法是否符合它的预期目的。我们将解释这些算法如何工作,并在Spark和Neo4j中运行示例。如果一个算法在一个平台上不可用,或者平台之间的差异并不重要,我们将只提供一个平台上的示例。

    图5-1显示了中心性算法可以回答的问题类型之间的差异,表5-1是每个算法使用示例计算的快速参考。
    在这里插入图片描述
    图5-1.有代表性的中心性算法及其回答的问题类型
    表5-1.中心性算法概述
    在这里插入图片描述
    在这里插入图片描述
    一些中心性算法计算每对节点之间的最短路径。这对中小型图很有效,但是对于大型图来说,计算上是不允许的。为了避免大型图上的长运行时间,一些算法(例如,中间中心性)有估算版本。

    首先,我们将为我们的示例描述数据集,并将数据导入Apache Sark和Neo4j中,按表5-1中列出的顺序介绍各个算法。我们将从对算法的简短描述开始,并在有必要时提供有关它如何操作的原理性信息。对于涉及到的变种算法,将会只做简要描述。大多数章节还包括有关相关算法的使用场景指导。我们在每个部分的末尾,在示例数据集上演示示例代码。

    让我们开始吧!

    图数据示例:社交图

    中心性算法与所有领域的图都相关,但是社交网络提供了一种非常相关的方式来考虑动态影响和信息流向。本章中的例子是在一个类似Twitter的小规模图上运行的。您可以从Github上下载节点和关系文件,我们将用它们来创建图。
    表5-2 social-node.csv
    在这里插入图片描述
    表5-3 social-relationships.csv
    在这里插入图片描述
    图5-2展现了我们想要构建的图。
    在这里插入图片描述
    图5-2.图模型

    图中有一个较大的用户集,它们之间有连接,而另外一部分较小的用户组没有连接到较大的用户组上,它们相互之间是断开的。基于这些csv文件的内容,我们将在在Spark和Neo4j中创建图。

    将数据导入Apache Spark

    首先,我们将需要的包从Spark和GraphFrames中导入

    from graphframes import *
    from pyspark import SparkContext
    

    我们可以用如下的代码来根据csv文件创建一个GraphFrame

    base = "file:///home/retire2053/source/graph_algorithms_resources/"
    v = spark.read.csv(base+"data/social-nodes.csv", header=True)
    e = spark.read.csv(base+"data/social-relationships.csv", header=True)
    g = GraphFrame(v, e)
    

    将数据导入Neo4j

    接下来,我们将数据装载到Neo4j,以下查询语句用来导入节点。

    WITH "https://github.com/neo4j-graph-analytics/book/raw/master/data/" AS base
    WITH base + "social-nodes.csv" AS uri
    LOAD CSV WITH HEADERS FROM uri AS row
    MERGE (:User {id: row.id})
    

    然后是导入关系

    WITH "https://github.com/neo4j-graph-analytics/book/raw/master/data/" AS base
    WITH base + "social-relationships.csv" AS uri
    LOAD CSV WITH HEADERS FROM uri AS row
    MATCH (source:User {id: row.src})
    MATCH (destination:User {id: row.dst})
    MERGE (source)-[:FOLLOWS]->(destination)
    

    现在,我们的图已经被装载了,是开始使用算法的时候了。

    度中心性(Degree Centrality)

    度中心性是我们将在本书中讨论的最简单的算法。它计算节点上传入和传出关系的数量,该算法可以用于在图中查找”热"(poplular)的节点。度中心性是Linton C. Freeman在1979年的论文“Centrality in Social Networks: Conceptual Clarification”中提出的。

    到达范围(Reach)

    节点的到达范围(reach)是衡量重要性的合理标准。一个节点能接触到多少个其他节点?一个节点的度(Degree)是它所具有的直接关系的数目,包括入度数和出度数。你可以将度视为该节点的直接到达节点。例如,一个在活跃的社交网络中很高节点度数的人会有很多直接的接触,因此而通常更容易得感冒一些。

    网络的平均度(average degree)只是关系总数除以节点总数;平均度数容易被高度节点严重扭曲,也就是低度节点容易被平均。度分布(degree distribution)是被随机选择的节点具有某个度数的概率。

    图5-3说明了Subreddit上,主题之间连接的实际分布的差异。如果你简单地取平均值,你会假设大多数主题有10个连接,而实际上大多数主题只有2个连接。
    在这里插入图片描述
    图5-3.Jacob Silterrapa绘制的这张Subreddit度分布图提供了一个例子,说明平均值通常不反映网络中的实际分布。CC BY-SA 3.0。
    这些评估用于对网络类型进行分类,如第2章讨论的自由缩放(Scale-free)或小世界(small world)网络。它们还提供了一个快速的措施来帮助估计事物在网络中传播或波动的可能性。

    度中心性算法的使用场景

    如果您试图通过查看传入和传出关系的数量来分析影响,或者找到单个节点的“流行度”,请使用“度中心性”。当你关注即时连通性时,它会很好地工作。不仅仅于此,当您想要评估整个图的最小程度、最大程度、平均程度和标准偏差时,度中心性也应用于全局分析。
    示例用例包括:

    • 通过人际关系识别有权势的个人,例如社交网络中的人际关系。例如,在BrandWatch的“Most Influential Men and
      Women on Twitter 2017”中,每个类别的前5名都有超过4000万名粉丝。
    • 将欺诈者与在线拍卖网站的合法用户分开。欺诈者的加权中心性倾向于明显更高,因为他们的目的是人为地提高价格。阅读P.
      Bangcharoensap等人的论文Two Step Graph-Based Semi-Supervised Learning for
      Online Auction Fraud Detection。

    在Apache Spark上的度中心性算法

    现在,我们用如下的代码来执行度中心性算法

    total_degree = g.degrees
    in_degree = g.inDegrees
    out_degree = g.outDegrees
    (total_degree.join(in_degree, "id", how="left")
    .join(out_degree, "id", how="left")
    .fillna(0)
    .sort("inDegree", ascending=False)
    .show())
    

    我们首先计算总度数,进度数和出度数。然后我们将这些DataFrame连接在一起,使用左连接来保留没有传入或传出关系的任何节点。如果节点没有关系,则使用fillna函数将该值设置为0。
    下面是在pyspark中运行代码的结果:

    +-------+------+--------+---------+
    |     id|degree|inDegree|outDegree|
    +-------+------+--------+---------+
    |   Doug|     6|       5|        1|
    |  Alice|     7|       3|        4|
    |Michael|     5|       2|        3|
    |Bridget|     5|       2|        3|
    |Charles|     2|       1|        1|
    |    Amy|     1|       1|        0|
    |  David|     2|       1|        1|
    |   Mark|     3|       1|        2|
    |  James|     1|       0|        1|
    

    我们可以在图5-4中看到,Doug是我们Twitter图中最受欢迎的用户,有五个追随者(在链接中)。图中该部分的所有其他用户都关注他,而他只关注一个人。在真实的Twitter网络中,名人有很高的追随者数量,但往往关注很少的人。因此我们可以认为Doug是名人!
    在这里插入图片描述
    图5-4.度中心性的可视化
    如果我们正在创建一个显示被最多关注的用户的页面,或者希望建议用户来跟踪,我们可以使用此算法来识别这些用户。
    在这里插入图片描述
    有些数据可能包含关系很多的非常密集的节点。这些节点不会增加太多额外的信息,并且会扭曲一些结果或增加计算复杂性。你可能希望使用子图过滤掉这些密集的节点,或者使用投影方法将关系汇总成为一个权重。

    展开全文
  • 由于是面向用户的软件,所以我们先来看看整体的页面布局,如下图所示: 上图中,可以看到,软件界面中上方存在两种类型的算法选择,分别是单图算法和双图算法,位于界面左侧的是四个不同的按钮,分别是两个打开本地...

    公众号 “菜鸟学Python”, 设为 “星标”

    455篇原创,和30w+一起学Python!

    对于PS,大家都不会陌生,小编身边的很多人都用PS进行过图像的编辑,PS的功能十分强大,但是软件本身十分庞大,对于电脑的性能要求较高。

    今天,小编就用python来实现PS当中的33种图像处理的算法,让大家能够不用PS,依旧可以快速的实现图像的处理。

    01.环境配置

    本次程序用到的python库非常的多,为了让大家能够使用本次的程序,我们需要明确环境的配置要求。

    Pillow                         7.2.0

    scikit-image              0.17.2

    opencv-python             3.4.10.35

    numpy                     1.19.0

    大家需要确保自己的python环境中有上述的第三方库,才能执行下面我们所涉及到的程序内容。

    02.软件整体讲解

    在PS的图像处理算法中,有针对于两张图片实现的图层混合的算法,也有针对于单张图片处理的算法,小编对这两种情形都有涉及,让大家可以根据情况灵活处理。由于是面向用户的软件,所以我们先来看看整体的页面布局,如下图所示:

    上图中,可以看到,软件界面中上方存在两种类型的算法选择,分别是单图算法双图算法,位于界面左侧的是四个不同的按钮,分别是两个打开本地图片的按钮和执行单图算法和双图算法的按钮。

    中间的三个显示区域,则是用来显示不同图片的展示区。界面右上角的按钮是用来退出程序的按钮。


    03.算法程序讲解

    针对于单图和双图,小编一共涉及到33种算法,单图算法中,包含了常见的素描、浮雕、球形图、旋转模糊、旧照片等二十余种算法,而针对于双图算法中,则是包含了图片的叠加、实色混合等十余种算法。仅仅这些算法的代码,就有八百多行,这里我们简单的针对几种算法的程序进行讲解演示。

    1).单图算法

    把照片弄成旧照片:

    对于单图算法,我们来说明一下旧照片的函数,首先是将输入图片的RGB三通道进行分离,然后将输出图片的三个通道按照不同的比例进行融合。最后将输出图片中大于1的像素值设置为1,否则就保留原先的数值。其算法效果如下图所示。

    2).双图算法

    修改照片不透明度:

    对于双图算法,更多的是对于图层的基础操作,因此在程序上会简单一些,例如上图中不透明度函数。函数仅仅有一行代码,就是将两张图片按照不同的透明度比例进行叠加,即可完成。其效果如下图所示。

    03.界面程序讲解

    在对图像算法有了介绍后,接下来我们来看一下界面的程序中,对于各个控件是如何构建的吧。本次界面的搭建用到的是python的内置库tkinter。其页面布局的程序大家可以下载源码来自行分析,我们主要来看一下页面中各个按钮所控制的函数功能。

    对于打开图片1打开图片2两个按钮,其控制的函数作用就是打开图片并显示在界面中,函数如下图所示:

    上述的函数通过读取本地图片文件,然后调整图片的大小,并显示在Label控件中。

    对于单图执行和双图执行的按钮控件,它们的作用是将图片按照特定的算法进行处理,并将处理后的结果显示在最右侧的结果展示中,以单图执行的函数为例。

    函数首先读取图片,并将函数大小调整为偶数,因为某些算法的执行要求输入图片大小为偶数。然后按照选择的单图算法来处理图片并保存到本地,最后,读取处理好的图片显示到界面中。

    04.效果展示:

    以上就是对于界面中主要按钮控件所控制函数的讲解,接下来我们来看一下程序最终的执行效果吧。

    以上就是小编今天为大家带来的分享,Python真的是太强大了!可以玩爬虫,自动化办公,数据分析,图像处理,机器学习,数据挖掘,金融分析,自动化测试,后端开发,运维等等方方面面都可以用。小伙伴,赶紧学起来吧!

    推荐阅读:
    入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
    干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |
    趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
    AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
    

    年度爆款文案

    点这里,直达菜鸟学PythonB站!!
    
    展开全文
  • 图像算法、深度学习总结

    千次阅读 热门讨论 2018-07-07 16:35:07
    一篇博客,来结束自己这几年来图像算法的职业生涯 总的来说,图像算法、深度学习,前景不是很明朗。研究生做这个挺多的,因为大家要发论文,需要一些算法。并且,图像发论文比较容易,也就好毕业... 首先说说,...
  • 传统图像算法和深度学习图像处理的区别

    千次阅读 多人点赞 2021-06-04 14:19:44
    说到传统图像算法,相信大家第一想到的可能是openCV这个开源库,但其实这个库里面目前已经引入了很多深度学习算法例如YOLO、SSD等,但对于刚使用openCV不久的同学们来说应该是对其中一些常用的API函数比较熟悉,例如...
  • 简洁明了的拓扑图算法讲解

    千次阅读 2018-08-11 12:27:23
    算法思想:类似于二叉树的层次遍历,遍历所有结点,将入度为0的结点存在一个栈中,依次输出栈内的各个结点时,将每个节点的子节点的度减1,然后将其中度为0的结点存入栈中,循环执行上述操作,直到所有结点遍历完。...
  • 基本图算法时间复杂度

    千次阅读 2016-06-05 12:18:02
    基本图算法时间复杂度
  • 10种图算法直观可视化解释

    万次阅读 2020-08-31 09:23:04
    快速介绍10个基本的图算法,并举例和可视化 图已经成为一种强大的建模和捕获真实场景中的数据的手段,比如社交媒体网络、网页和链接,以及GPS中的位置和路线。如果您有一组相互关联的对象,那么您可以使用图来表示...
  • 浅谈我从非科班转到算法工程师3个月的经历   应@王子瑞/Aliloke邀请,我来谈谈我从非科班转行到算法工程师的经历吧。 首先,我对算法这块的理解是非常的肤浅的,因为我接触这块也就三个多月的时间,说起来为何当...
  • 对于上而言,语义分割的目的是找出每个像素是否是 “person” 但是,实例分割的目的是找出属于person的像素之后,还要区分出哪些属于不同的person。 一,给定0-1矩阵,求连通域,不能使用Mat类。 二,写一个均值...
  • 利用图算法实现金融行业风控

    千次阅读 2017-02-13 16:25:20
    摘要: 本文将针对阿里云平台上图算法模块来进行实验。图算法一般被用来解决关系网状的业务场景。与常规的结构化数据不同,图算法需要把数据整理成首尾相连的关系图谱。图算法更多的是考虑边和点的概念。阿里云机器...
  • Graph Algorithms(图算法

    千次阅读 2018-05-31 00:09:26
    (u,v)是有向中的边,我们就称顶点v领接顶点u。 从顶点u到顶点v的路径是顶点序列&amp;amp;lt;v0,v1,v2...vk&amp;amp;gt;,其中v0 = v,vk=u。路径中的顶点是唯一的,则称路径是简单的。起点和终点一致则...
  • 图像算法研究---背景虚化算法

    万次阅读 热门讨论 2017-07-24 20:18:31
    本文在抠图算法基础上,实现了一种如何实现单反背景虚化效果的算法,更具单反的真实感,跟大家分享一下!
  • 着色算法

    千次阅读 2020-01-21 15:20:00
    着色算法一般采用m叉搜索树,搜索策略采用深度优先。约束条件是在节点<x1, x2, … , xk>处,顶点k+1的邻接表中节点已经用过的颜色不能再用;如果邻接表中节点已用过m种颜色,则节点k+1没法着色,从该节点...
  • 图像处理系列——直方统计算法

    千次阅读 2021-12-15 21:36:25
    直方统计算法可指定对比度差的局部区域进行相应的提升,来实现图像局部区域的图像增强目的。直方统计是根据模板大小内的像素邻域的均值、方差与全局的均值、方差的比较,来决定像素的操作。
  • 的十大经典算法

    万次阅读 多人点赞 2019-02-27 21:03:36
    的遍历根据访问结点的顺序,主要分为有两种算法:广度优先搜索(Breadth-First-Search)和深度优先搜索(Depth-First-Search)。 广度优先搜索(BFS) 算法思想 首先访问起始结点v,接着由v...
  • python OpenCV 图片相似度 5种算法

    万次阅读 多人点赞 2019-05-17 15:28:34
    原始两张图片: 代码运行结果如下。 ... 三直方和单通道直方的值为0-1,值越大,相似度越高。 源代码如下: import cv2 import numpy as np from PIL import Image import requests ...
  • 今天特别感慨,自己从决定研究图像处理,势必要做出一键修图算法。 经历了,三个多月的书籍积累,三个多月的算法调整以及优化。 人是一种奇怪的动物,当你做不到的时候,你以为做到了,自己会感觉很爽,很有成就感...
  • 常用算法-路径搜索算法(图算法)20.1 BFS与DFS 最大流最小割定理,最大流问题,最小生成树问题,Prim算法,Dijkstra算法是典型的单源最短路径算法。Floyd-Warshall算法是解决任意两点间的最短路径的一种算法,可以...
  • 图算法--有向无环图(DAG)

    千次阅读 2014-10-23 19:53:34
    在编译器中,经过词法分析和语法初步分析,会生成语法树,在进一步对语法树的处理中,会用到一个叫做“有向无环”的数据结构。...因为DAG可以执行拓扑排序,所以可以用拓扑排序相关算法来推到一个是否DAG。
  • xgboost之分位点算法
  • 热力生成算法及其具体实现

    千次阅读 2022-05-21 10:55:57
    详细介绍了热力生成算法及其具体实现,并且给出了实现代码。
  • YOLT遥感图像检测算法详解

    千次阅读 2019-11-03 10:47:42
    目录1、需求解读2、遥感图像处理和普通图像处理的区别与联系3、YOLT检测算法分析3.1 遥感图像中的视觉挑战3.2 YOLT检测算法简介4、YOLT检测算法实现详解4.1 YOLT检测算法网络架构简介4.2 YOLT检测算法如...
  • 1.3.2 用流程描述算法

    千次阅读 2021-05-22 01:15:48
    1.3.2 用流程描述算法简单的算法可以用自然语言来描述,但是较为复杂的算法要如何描述呢?在计算机程序中经常会出现很多多分支选择结构的语句,这样的语句很容易产生歧义。而计算机程序需要每一步都是确切的,...
  • 一张看懂图像识别算法发展历史

    千次阅读 2019-08-22 13:50:24
    一张看懂图像识别算法发展历史
  • 图像算法工程师三重境界

    千次阅读 2016-05-10 11:17:29
    一、传统图像算法工程师;二、现代图像算法工程师;三、人工智能时代图像算法工程师
  • 传统图像分类算法总结

    千次阅读 2021-04-11 13:34:06
    这里写自定义目录标题传统图像分类算法的原理(1) 数据集的处理(2)图像特征提取(3)训练分类器(4)图像分类 图像分类,顾名思义,就是输入一张图像,输出对该图像内容分类的描述的问题。它是计算机视觉的核心...
  • 二、基于的推荐算法PersonalRank算法 1、PersonalRank算法简介 在协同过滤中,主要是将上述的用户和商品之间的关系表示成一个二维的矩阵(用户商品矩阵)。 而在基于的推荐算法中,将上述的关系表示成...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,044,129
精华内容 817,651
关键字:

图算法