3

我是使用 NumPy 的新手,我对 Python 的了解有限,而且对处理图像也很陌生。我不明白该怎么做。

我需要知道如何在 Python 中对嵌套的 for 循环进行矢量化,其中第二个循环依赖于第一个循环。

例子:

for(condition)
{ // 
  if (condition) 
  { //
    for(condition)
    { //
    }
  }
}

让我给出上下文和一段代码,以便更容易解释我在寻找什么。

我找到了骨架化图像的端点(只有一个相邻像素的像素)和连接点(具有三个或更多相邻像素的像素),在这个代码片段中,代码试图找到连接点之间的任何连接点或连接点和端点之间。

#FOR JUNCTION POINTS TO OTHER JUNCTION POINTS OR END POINTS

for i in xrange(lenj):
    a=junc_points[i]
    point_junc=en2(a[0],a[1],skeleton,point)
    point.append(a)   
    for c in point_junc:
        a1=c
        point.append(a1)
        while True:
            flag=0
            a2=en1(a1[0],a1[1],skeleton,point)    
            a1=a2[1:]
            if a2[0]==0:
                break
            else: 
                point.append(a1)  
                for j in xrange(lenej):
                    b=end_junc_points[j]
                    if a1==b:
                       #print(a," is connected to ",b)
                        flag=1
                        adj[i][j]=1
                        break                    
            if flag==1:
                break

point是一个列表变量,存储所有以前访问过的像素坐标

e2()返回点的所有相邻像素,a以便可以遍历每个分支以查找端点或交汇点

e1()[0]如果一个像素已经被访问过,则返回 else 返回x[1,x,y]和 y 是它前面的像素

junc_points是一个存储所有连接点的列表

end_junc_points是一个存储所有连接点和端点的列表

lenej是长度end_junc_points

lenj是长度junc_points

point_junc存储由返回的像素坐标e2()

adj是邻接矩阵

我需要这个的原因是因为我试图从骨架化图像中的端点和连接点制作一个关键点图。adj存储该图

我用 Python 以非常基本的方式编写了代码。正如你所理解的,这既不高效也不慢,这就是我需要矢量化的原因。除了矢量化,请指出任何用于处理骨架化图像的函数或库,这将有助于我优化我的代码。

我很欣赏我的代码看起来很模糊,我试图尽可能多地解释一切。我没有提供完整代码的原因是因为代码的其他部分具有相同的东西,我希望能够自己完成它们,这就是为什么我只为一部分寻求帮助,作为理解如何对其进行矢量化可能也有助于我完成其余的工作。

编辑:添加输入输出。

对于这张图片

在此处输入图像描述

这是形成的骨架图像

在此处输入图像描述

在运行一段代码时,我找出了端点和连接点,在这种情况下

在此处输入图像描述

没有端点,自然,这些连接点和端点继续作为这段代码的输入,它应该形成一个邻接矩阵将其转换为图形。为该图像形成的图(由邻接矩阵表示)是:

在此处输入图像描述

我希望这可以消除对输入和输出的疑虑

4

0 回答 0