具体实施方式
本发明的设计思路是:鉴于现有技术中识别360度全景图片的准确性低的问题,本发明首先通过样本训练学习若干个图片类型已知的图片特征获得区分360度全景图片特征和非360度全景图片特征的支持向量数据后,然后再根据该支持向量数据判断待识别图片是否符合360度全景图片特征,实现待识别图片的自动识别,并非简单的比较待识别图片自身的像素点的颜色值,判断准确性高,进而根据识别结果选择对应的图片播放工具,提升用户体验。为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图2为本发明一个实施例提供的一种360度全景图片的识别方法的流程图。如图2所示,该方法包括:
步骤S110,收集若干个360度全景图片和非360度全景图片作为样本图片。
将收集到的若干个360度全景图片和非360度全景图片分别放入不同的文件夹下以进行区分,例如:在E://data//images//0//路径下放非360度全景图片数据;在E://data//images//1//路径下放360度全景图片数据。
步骤S120,获取每个样本图片的特征向量,通过样本训练获取区分360度全景图片特征和非360度全景图片特征的支持向量数据。
在获取每个样本图片的特征向量之前,首先需要将若干个360度全景图片数据和非360度全景图片数据分别加载到不同的容器中,以便特征向量获取开始时,加载到相应程序的内存中。例如,读取E://data//images//0//中的数据,将所有360度全景图样本数据加载到vector<Mat>posImages;读取E://data//images//1//中的数据,将所有非360度全景图样本数据加载到vector<Mat>negImages。
获取特征向量的时候,是通过每个样本图片左右两侧的若干列的像素点的颜色值,计算色差值,并从所有色差值中等间距地选取出预定数量N个色差值,将所述N个色差值构成色差向量,作为每个样本图片的特征向量,有有多少个样本图片,就可以获得多少个特征向量。
然后再通过样本训练,根据样本数据的特征向量和每个特征向量所对应的图片类型(360度全景图片或者非360度全景图片),获取区分360度全景图片特征和非360度全景图片特征的支持向量数据,该支持向量数据是通过若干个已经图片类型的样本图片获得的,可以更加准确的区分360度全景图片和非360度全景图片。
步骤S130,采用与获取每个样本图片的特征向量相同的方式获取所述待识别图片的特征向量。
为了利用样本训练得到的支持向量数据进行待识别图片的识别,需要采用与获取每个样本图片的特征向量相同的方式获取待识别图片的特征向量。
步骤S140,判断所述待识别图片的特征向量是否符合支持向量数据中的360度全景图片特征;若判断为是,则确定待识别图片为360度全景图片,否则为非360度全景图片。
获得待识别图片的特征向量后,通过支持向量数据,就可以自动判断出待识别图片是否是360度全景图片。
可见,本发明是综合若干个图片类型已知的图片特征获得支持向量数据后,再进一步判断待识别图片的特征向量是否符合360度全景图片特征,实现待识别图片的自动识别,并非简单的比较待识别图片自身的像素点的颜色值,判断准确性高,进而根据识别结果选择对应的图片播放工具,提升用户体验。
在本发明的一个实施例中,步骤S120中的通过样本训练获取区分360度全景图片特征和非360度全景图片特征的支持向量数据包括如下步骤:
(1)定义特征矩阵,特征矩阵的行数为所有样本图片的个数,列数为样本图片的特征向量的维数;将所有所述样本图片的特征向量依次放入所述特征矩阵。
例如,定义特征矩阵为“Mat trainFeatureMat”,存入所有样本图片的特征向量。所有样本图片的个数为100个,每个样本图片的特征向量的维数,即每个特征向量区分的色差值的个数为25个,则特征矩阵的行数为100行,每一行代表一个样品图片,且每个样本图片都有其唯一的标识;特征矩阵的列数为25列,每一列代表一个特征向量中的色差值。
(2)定义分类标号矩阵,所述分类标号矩阵的行数为所有样本图片的个数,列数为1,其值取1或-1,其中1表示360度全景图片,-1表示非360度全景图片;对放入所述特征矩阵中的每个样本图片,在所述分类标号矩阵中依次标识所述样本图片所属图片类型的值。
例如,定义分类标号矩阵“Mat trainLabelMat”,存入所有样本图片的类别,这里的样本图片的类别是360度全景图片,可用“1”表示;或非360度全景图片,可用“-1”表示。
因为每个样本图片都有唯一的标识,在定义分类标号矩阵中每个图片对应唯一的样本图片的类别。在一个具体的例子中,对于一个样本图片是360度全景图片,其唯一标识是样本图片1,在定义分类标号矩阵中的其中一行的两列中,其中一列存入的是样本图片1,另一列是“1”;对于另一个样本图片是非360度全景图片,其唯一标识是样本图片2,在定义分类标号矩阵中的其中一行的两列中,其中一列存入的是样本图片2,另一列是“-1”。
分类标号矩阵中也可只包含一列用来标识样本图片所属图片类型的值,其每一行代表的样本图片需与特征向量中的每一行代表的样本图片一一对应。在一个具体的例子中,在特征矩阵中的第1行存入的是图片1的特征向量,且图片1是360度全景图片,那么在分类标号矩阵中的第1行存入的是标识图片1的所属图片类型的值“1”;在特征矩阵中的第3行存入的是图片3的特征向量,且图片3是非360度全景图片,那么在分类标号矩阵中的第3行存入的是标识图片3的所属图片类型的值“-1”。
(3)根据所述特征矩阵和所述分类标号矩阵,利用机器学习的方法获取区分360度全景图片特征和非360度全景图片特征的支持向量数据。
在本发明的一个实施例中,步骤S120中的获取每个样本图片的特征向量包括:
(1)对每个样本图片,分别获取左侧C列与右侧C列的每个像素点的颜色值,其中C取值为大于等于1的自然数。
例如,获取左侧2列和右侧2列的每个像素点的颜色值,那么获得的像素点的个数就是左侧2*H个,右侧2*H个。
(2)对相对图片中间线对称的每对像素点分别计算色差值。
如上述例子中,获取的左侧的像素点的第一列的像素点颜色值记为L11、L12、...、L1H,第二列的像素点颜色值记为L21、L22、...、L2H;右侧的像素点的第一列的像素点颜色值记为R11、R12、...,R1H,第二列的像素点颜色值记为R21、R22、...、R2H。那么,相对图片中间线对称的每对像素点分别计算色差值是:L11-R11,L12-R12,...,L1H-R1H;以及L21-R21,L22-R22,...,L2H-R2H。
(3)从所有色差值中等间距地选取出预定数量N个色差值,将所述N个色差值构成色差向量。
为了最大程度上获得样本图片的像素点差值的整体分布情况,且还需要考虑程序运行的速度,本实施例,是通过等间距地选取的方法,在选取的每一列色差值中等间距的选取N/C个色差值,并将所有选取出来的N个色差值色差值构成色差向量。这里的预定数量是人工设定的,例如可以设定为200个。
在一个具体的例子中,预定数量为400个,第一列色差值为L11-R11,L12-R12,...,L1H-R1H,第二列色差值为L21-R21,L22-R22,...,L2H-R2H。那么就分别从第一列和第二列的色差值中等间距地选取200个色差值,构成该样本图片的色差向量,该色差向量的维数是400,即色差向量中的色差值的个数是400个。
(4)根据所述色差向量得到每个样本图片的特征向量,所述特征向量的维数为N。
在本发明的一个实施例中,将C取值等于1;即分别获取左侧1列与右侧1列的每个像素点的颜色值。
那么前一个实施例的(1)中的对每个样本图片,分别获取左侧C列与右侧C列的每个像素点的颜色值包括:
分别获取每个样本图片的第一列和最后一列的每个像素点的颜色值,即获取每个像素点的颜色值用每个像素点的R值、G值和B值进行表示。RGB是一种颜色标准,R(Red)代表红色,G(Green)代表绿色,B(Blue)代表蓝色,图片中的所有颜色,都由上述这三种颜色色光按照不同的比例混合而成,每种颜色都可以通过R值、G值和B值进行表示。本实施例中,获得每个样本图片的像素点的颜色值就是获得每个像素点的R值、G值和B值。
得到每个样本图片的第一列像素点的颜色值为:A={{RA1,GA1,BA1},{RA2,GA2,BA2},{RA3,GA3,BA3}...{RAn,GAn,BAn}};每个样本图片的最后一列像素点的颜色值为:B={{RB1,GB1,BB1},{RB2,GB2,BB2},{RB3,GB3,BB3}...{RBn,GBn,BBn}}。
其中,n代表所述样本图片的行数,如果图片的大小为W*H,W为图片的宽度,H为图片的高度,那么n=H;An代表第一列第n行的像素点,Bn代表最后一列第n行的像素点。
前一个实施例的(1)中的对相对图片中间线对称的每对像素点分别计算色差值包括:
根据公式计算相对图片中间线对称的每对像素点的色差值。
从所有色差值Ci中等间距地选取出预定数量N个色差值,将所述N个色差值构成色差向量。
前一个实施例的(4)中的根据所述色差向量得到每个样本图片的特征向量包括:根据N个色差值构成的色差向量C={C1,C2,C3,...,CN}得到每个样本图片的特征向量,即将色差向量C作为每个样本图片的特征向量。
需要说明的是,获取所述待识别图片的特征向量的方法必须与获取每个样本图片的特征向量的方法相同,保证该支持向量数据的可用性。
机器学习的方法有很多种,在本发明的一个实施例中,所述机器学习的方法包括支持向量机算法SVM。
图3为本发明一个实施例提供的一种360度全景图片的识别装置的示意图。如图3所示,该360度全景图片的识别装置300包括:
样本图片收集单元310,用于收集若干个360度全景图片和非360度全景图片作为样本图片。
特征向量获取单元320,用于获取每个样本图片的特征向量;以及采用与获取每个样本图片的特征向量相同的方式获取所述待识别图片的特征向量。
支持向量获取单元330,用于根据获取的每个样本图片的特征向量,通过样本训练获取区分360度全景图片特征和非360度全景图片特征的支持向量数据;
判断单元340,用于判断所述待识别图片的特征向量是否符合支持向量数据中的360度全景图片特征;若判断为是,则确定待识别图片为360度全景图片,否则为非360度全景图片。
在本发明的一个实施例中,所述支持向量获取单元330包括:特征矩阵、分类标号矩阵、样本放入模块和训练模块,
所述特征矩阵的行数为所有样本图片的个数,列数为样本图片的特征向量的维数;
所述分类标号矩阵的行数为所有样本图片的个数,列数为1,其值取1或-1,其中1表示360度全景图片,-1表示非360度全景图片样;
所述样本放入模块,用于将所有所述样本图片的特征向量依次放入所述特征矩阵;对放入所述特征矩阵中的每个样本图片,在所述分类标号矩阵中依次标识所述样本图片所属图片类型的值;
所述训练模块,用于根据放入样本后的所述特征矩阵和所述分类标号矩阵,利用机器学习的方法获取区分360度全景图片和非360度全景图片的支持向量数据。
在本发明的一个实施例中,所述特征向量获取单元320包括:
颜色值获取模块,用于对每个样本图片或所述待识别图片,分别获取左侧C列与右侧C列的每个像素点的颜色值,其中C取值为大于等于1自然数;
色差值计算模块,用于对相对图片中间线对称的每对像素点分别计算色差值;
色差向量构成模块,用于从所有色差值中等间距地选取出预定数量N个色差值,将所述N个色差值构成色差向量;
特征向量获取模块,用于根据所述色差向量得到每个样本图片的特征向量,所述特征向量的维数为N。
在本发明的一个实施例中,C取值等于1;
所述颜色值获取模块,具体用于分别获取每个样本图片的第一列和最后一列的每个像素点的颜色值,得到每个样本图片的第一列像素点的颜色值为:A={{RA1,GA1,BA1},{RA2,GA2,BA2},{RA3,GA3,BA3}...{RAn,GAn,BAn}};每个样本图片的最后一列像素点的颜色值为:B={{RB1,GB1,BB1},{RB2,GB2,BB2},{RB3,GB3,BB3}...{RBn,GBn,BBn}};其中n代表所述样本图片的行数,An代表第一列第n行的像素点,Bn代表最后一列第n行的像素点;
所述色差值计算模块,具体用于根据公式计算相对图片中间线对称的每对像素点的色差值;
所述特征向量获取模块,具体用于根据N个色差值构成的色差向量C={C1,C2,C3,...,CN}得到每个样本图片的特征向量。
在本发明的一个实施例中,所述机器学习的方法包括支持向量机算法SVM。
需要说明的是,图3所示装置的各实施例与图2所示方法的各实施例对应相同,上文已有详细说明,在此不再赘述。
综上所述,本发明首先收集若干个360度全景图片和非360度全景图片作为样本图片,获取每个样本图片的特征向量,通过样本训练以得到区分360度全景图片特征和非360度全景图片特征的支持向量数据,然后采用与获取每个样本图片的特征向量相同的方式获取待识别图片的特征向量,再根据该支持向量数据判断待识别图片的特征向量是否符合360度全景图片特征;若判断为是,则确定待识别图片为360度全景图片。可见,本发明是综合若干个图片类型已知的图片特征获得支持向量数据后,再进一步判断待识别图片的特征向量是否符合360度全景图片特征,实现待识别图片的自动识别,并非简单的比较待识别图片自身的像素点的颜色值,判断准确性高,进而根据识别结果选择对应的图片播放工具,提升用户体验。
以上所述,仅为本发明的具体实施方式,在本发明的上述教导下,本领域技术人员可以在上述实施例的基础上进行其他的改进或变形。本领域技术人员应该明白,上述的具体描述只是更好的解释本发明的目的,本发明的保护范围应以权利要求的保护范围为准。