一种量子线路图像识别方法与流程

文档序号:11627825阅读:1840来源:国知局
一种量子线路图像识别方法与流程

本发明涉及opencv的图像识别技术,具体涉及量子信息领域的量子线路图像的识别方法。



背景技术:

利用现有的计算机技术辅助研究量子线路是研究人员普遍采用的方法。revlib有大量可供下载的量子线路门库,在量子线路门库中,一个线路的文本表示方法为real文件格式,其中包含了关于该量子线路的所有信息。

然而real格式文件可读性很差,门的类型用ti(1<i<n,n代表门的总类型数)表示,各量子位用字母表示,既不便于理解,也不便于计算机直接读取数据,因此需要辅助软件处理这些文件以便科研人员进行研究。

下面是一个量子线路文本格式的实例:

#function:4gt13-v0

#checks,ifinputisgreaterthan13.

#note:embeddingwithconstant0.

#usedlibrary:mct(gates:3,quantumcosts:15)

#thisfilehavebeentakenfromrevlib(www.revlib.org).

.version1.0

.numvars5

.variablesabcde

.inputs0bcde

.outputsggggf

.constants0----

.garbage1111-

.begin

t2ea

t4dcba

t2ae

.end

但是由文本表示的量子线路信息不能给人以直观的印象,也不方便研究。rcviewer+.exe可以根据real格式的文件在计算机上显示整个线路,并且能够以图片格式保存。这是将量子线路以图像形式显示的最直接的方法。

虽然rcviewer+.exe软件将量子线路表示出来,但是该软件仅限于显示出量子线路图片,当研究人员需要在计算机上模拟这些量子线路的时候,只能根据图像(如图1所示)手动输入信息,包括量子线路的线数,每个门的类型,各量子位分别在第几根线上。

这种依靠人工输入信息的方法存在很多缺点。当量子线路规模较大时,极其容易产生差错,例如数错量子线路的线数,输入门的时候重复或者遗漏,数错量子位在第几根线上。而且,随着量子线路规模的扩大,线路和门变得非常复杂,依靠手动记录需要消耗大量的时间和精力。

opencv是一个基于bsd许可(开源)发行的跨平台计算机视觉库,可以运行在linux、windows、android和macos操作系统上。它轻量级而且高效——由一系列c函数和少量c++类构成,实现了图像处理和计算机视觉方面的很多通用算法。因此,利用opencv提供的类来识别量子线路图片是一种十分高效的做法。



技术实现要素:

本发明的目的在于克服上述局限,解决现有弊端,从而提供一种数据简介易懂,可读性强,操作方便,节省时间的量子线路图像识别方法。

本发明的目的通过以下技术方案来实现:一种量子线路图像识别方法,步骤如下:

将图片进行预处理,包括二值化操作、取反操作的数据;

把图片按照单条量子线路分割,包括霍夫变换的数据,去除无关直线,切割图像的参数以及存储方式;

检测直线,包括对横线和竖线的检测,对无关线的排除,对所得到线路的排序;

定位坐标点,包括根据横线和竖线综合判断量子门的起始点和终点,以及判断用霍夫变换检测不到的量子门;

识别量子位,包括对量子位中心点的定位,对量子位特征的检测,对数据的记录;

确定门的类型和数据,包括对线路的量子位所在线的数据的存储和分析;

将线路输出,包括从各个存储结构提取信息,设计整条线路的存储结构,输出到文本。

优选的是,对横线和竖线的检测,包括对横线和竖线的腐蚀,对横线和竖线的霍夫变换。

优选的是,对量子位中心点的定位,包括对整个图像的遍历,利用直线的数据进行索引。

优选的是,对量子位的数据分析还包括:对cnot门的识别、对toffoli门的识别、对not门的识别、对fredkin门的识别和对swap门的识别

综上所述,本发明具有以下优点:从rcviewer+.exe生成的图片中识别出量子线路数据,根据图像识别出的这些数据简介易懂,相比原始的real文件极大的提高了可读性,利用识别出的这些数据,可以很方便的在计算机上读取并构造量子门和量子线路,也就是将原本需要做实验的工作全部利用程序自动完成,节省了大量用于做实验的时间。同时,即使不依赖real格式的文件和rcviewer+.exe软件,只需要提供量子线路的图片,就可以在计算机中模拟出量子线路。只要以图片形式导入本发明的方法,即可得到关于该线路的文本信息,为量子线路研究和应用提供了方便。

附图说明

图1是rcviewer+.exe生成图片的运行界面;

图2是需要分割的图像的示意图;

图3是霍夫变换检测不到的量子门示意图;

图4-6是三种量子位的mat形式示意图;

图7-10是运行本方法得到的两个输入输出测试用例。

具体实施方式

为了加深对本发明的理解,下面将结合实施例和附图对本发明作进一步详述,该实施例仅用于解释本发明,并不构成对本发明保护范围的限定。

读取图像并存放进一个mat。mat是opencv提供的类型,用于存储图像,代表由0-255之间的数字组成的二维数组。所有的图像操作都将围绕这个mat进行。由于量子线路的图片仅有黑白两色具有实际意义,为了避免图像操作出现误差,将图片二值化,即所有的像素点只能取0和255之一。二值化后对整个图像进行取反,以便于后期对线条的处理。

经过二值化和取反的预处理后,对整个图像当中所有的横线进行霍夫变换,并记录下所有横线的起点坐标和终点坐标。

在进行霍夫变换前要对图像进行腐蚀操作去除要检测的线周围无关的噪点,以保证霍夫变换检测时的精确性。

霍夫变换识别出的线有干扰项,根据量子线路图的特点,横线的起点和终点的纵坐标都相同,因此根据这一判断条件遍历所有识别到的线,并提取出所有横线。由于霍夫变换检测直线的顺序是任意的,为了便于后续操作,我们需要对整个线路进行排序。

vec4i是opencv提供的四元组,可以保存四个数据。利用这个四元组保存霍夫变换检测到的直线。

由于图片大小的局限性,超过一定规模的量子线路均会分成多列显示(如图2所示)。因此采用普通的按顺序读取会产生错误。将分成多行的图片进行分割以避免识别的错误。由于前面已经识别出了所有的横线,而分成多行的图片两行之间的的空格大于一条线路两条线之间的空格,因此通过遍历y轴的横线的纵坐标即可确定分割点。分割后的图像分别存入vector<mat>中,再对每个vector中的每个mat分别处理。

当图像分割完成,则对分割后的每个mat进行独立操作。首先对每个图像识别横线,使用和之前相同的hough_y_axis模板。再对竖线进行识别。竖线识别首先需要用到hough_x_axis模板。该模板的设计思路同hough_y_axis一样,先腐蚀,再提取竖线,最后进行排序。但是由于量子线路图中存在一些特殊的量子门,如not门(如图3所示),霍夫变换无法检测到。

由于单个量子位无法形成直线,若线路中存在not门,则无法识别出来,如果not门在线路的中间,则会跳过,如果在左右两侧,则会被忽略。因此要精确识别出not门的位置,需要依赖图像的每个门之间的标准间距来计算。首先读取横线开头和结尾的横坐标,再读取竖线开头和结尾的横坐标,两者进行比较,若两者之差大于两个量子门的标准间距,则需要移动竖线的开头结尾的横坐标。这种操作需要依赖y_axis当中横线的起点和终点的横坐标数据。当确定好左右两端横坐标以后再根据两个门之间的标准间距依次确定每个门的横坐标。由此得到所有的门横坐标的精确位置。在确定了每个量子门的x坐标后,我们将量子门每个量子位的y坐标也提取出来,并封装到函数grid()当中,便于直接得到每个量子位的(x,y)坐标。

当每个量子位的(x,y)坐标确定好之后,我们需要依次识别每一种量子位。三种量子位的mat形式分别表示为图4(swap),图5(target)和图6(control)。

分别寻找了三个图像的不同特征点用于区分三种图片。由于函数限制,指针只能按行读取,因此在定义存储结构时要先将所有的门构成一个集合,再按行依次向这个集合里面赋值。在遍历mat的时候,需要检测的位分为控制位,目标位和交换门。选取特征点区分这三种量子位,以圆心展开,向周围寻找特征点。当该点符合三种量子位之一时记录下来并存入相应的数组。若不属于这三种之一,则跳过。当所有的点都检测完毕后,检测每个门的每一种量子位个数,并判断门的种类并标注名称。所有量子门检测完毕后按照规定的格式进行输出。

我们采用了vector<int>结构分别保存了swap,target,control三种量子位出现的线数。根据三个vector的大小可以分别确定出这个门的类型。依次输出门的类型,target_bit,swap_bit,control_bit。得到的最终结果可以保存在txt文本当中,也可以输出到程序窗口。

运行本方法得到的两个输入输出测试用例分别为图7、图8和图9、图10。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1