-
2018-06-07 20:28:05
图像处理中,经常需要对图像进行镜像翻转。
在低级版本的Matlab中,我们可以通过mirror函数实现
I = imread('lenna.jpg') %读取原图像 I1 = mirror(I,1) I2 = mirror(I,2) I3 = mirror(I,3)
目前,在较高版本的matlab中调整为flidim,使用方式和mirror相同.
help flipdim flipdim Flip matrix along specified dimension. flipdim is not recommended. Use FLIP instead. flipdim(X,DIM) returns X with dimension DIM flipped. For example, flipdim(X,1) where X = 1 4 produces 3 6 2 5 2 5 3 6 1 4 Class support for input X: float: double, single See also flip, fliplr, flipud, rot90, permute. flipdim 的参考页 名为 flipdim 的其他函数
flipdim效果示例
更多相关内容 -
基于镜像几何约束的单摄像机三维重构
2021-02-22 11:39:25镜像对称物体的单幅透视图几何等价于对称视点下的两幅视图,它们相差一个反射变换,并且具有自极几何对应性。平面镜不仅是对称面,而且还被当作标定平面,并利用灭点约束下的正八边形标记点计算相机外参矩阵。实验... -
电子政务-利用两个平面镜和镜像反射法实现立体图片或电影.zip
2021-09-15 14:21:08电子政务-利用两个平面镜和镜像反射法实现立体图片或电影.zip -
[Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)
2022-01-29 18:09:30欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习...这篇文章将继续讲解图像几何变换,包括图像镜像、图像仿射和图像透视。希望文章对您有所帮助,如果有不足之处,还请海涵。欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上开心快乐、共同成长。
该系列文章主要讲解Python OpenCV图像处理和图像识别知识,前期主要讲解图像处理基础知识、OpenCV基础用法、常用图像绘制方法、图像几何变换等,中期讲解图像处理的各种运算,包括图像点运算、形态学处理、图像锐化、图像增强、图像平滑等,后期研究图像识别、图像分割、图像分类、图像特效处理以及图像处理相关应用。
上一篇文章介绍图像几何变换,包括图像平移、图像缩放和图像旋转。这篇文章将继续讲解图像几何变换,包括图像镜像、图像仿射和图像透视。希望文章对您有所帮助,如果有不足之处,还请海涵。
下载地址:
前文赏析:
第一部分 基础语法
- [Python从零到壹] 一.为什么我们要学Python及基础语法详解
- [Python从零到壹] 二.语法基础之条件语句、循环语句和函数
- [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象
第二部分 网络爬虫
- [Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
- [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解
- [Python从零到壹] 六.网络爬虫之BeautifulSoup爬取豆瓣TOP250电影详解
- [Python从零到壹] 七.网络爬虫之Requests爬取豆瓣电影TOP250及CSV存储
- [Python从零到壹] 八.数据库之MySQL基础知识及操作万字详解
- [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)
- [Python从零到壹] 十.网络爬虫之Selenium爬取在线百科知识万字详解(NLP语料构造必备技能)
第三部分 数据分析和机器学习
- [Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)
- [Python从零到壹] 十二.机器学习之回归分析万字总结全网首发(线性回归、多项式回归、逻辑回归)
- [Python从零到壹] 十三.机器学习之聚类分析万字总结全网首发(K-Means、BIRCH、层次聚类、树状聚类)
- [Python从零到壹] 十四.机器学习之分类算法三万字总结全网首发(决策树、KNN、SVM、分类算法对比)
- [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解
- [Python从零到壹] 十六.文本挖掘之词云热点与LDA主题分布分析万字详解
- [Python从零到壹] 十七.可视化分析之Matplotlib、Pandas、Echarts入门万字详解
- [Python从零到壹] 十八.可视化分析之Basemap地图包入门详解
- [Python从零到壹] 十九.可视化分析之热力图和箱图绘制及应用详解
- [Python从零到壹] 二十.可视化分析之Seaborn绘图万字详解
- [Python从零到壹] 二十一.可视化分析之Pyechart绘图万字详解
- [Python从零到壹] 二十二.可视化分析之OpenGL绘图万字详解
- [Python从零到壹] 二十三.十大机器学习算法之决策树分类分析详解(1)
- [Python从零到壹] 二十四.十大机器学习算法之KMeans聚类分析详解(2)
- [Python从零到壹] 二十五.十大机器学习算法之KNN算法及图像分类详解(3)
- [Python从零到壹] 二十六.十大机器学习算法之朴素贝叶斯算法及文本分类详解(4)
- [Python从零到壹] 二十七.十大机器学习算法之线性回归算法分析详解(5)
- [Python从零到壹] 二十八.十大机器学习算法之SVM算法分析详解(6)
- [Python从零到壹] 二十九.十大机器学习算法之随机森林算法分析详解(7)
- [Python从零到壹] 三十.十大机器学习算法之逻辑回归算法及恶意请求检测应用详解(8)
- [Python从零到壹] 三十一.十大机器学习算法之Boosting和AdaBoost应用详解(9)
- [Python从零到壹] 三十二.十大机器学习算法之层次聚类和树状图聚类应用详解(10)
第四部分 Python图像处理基础
- [Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置
- [Python从零到壹] 三十四.OpenCV入门详解——显示读取修改及保存图像
- [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形
- [Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解
- [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制
- [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)
- [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)
第五部分 Python图像运算和图像增强
第六部分 Python图像识别和图像处理经典案例
第七部分 NLP与文本挖掘
第八部分 人工智能入门知识
第九部分 网络攻防与AI安全
第十部分 知识图谱构建实战
扩展部分 人工智能高级案例
作者新开的“娜璋AI安全之家”将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。虽然作者是一名技术小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在Python和安全路上与大家一起进步。
一.图像镜像
图像镜像是图像旋转变换的一种特殊情况,通常包括垂直方向和水平方向的镜像。水平镜像通常是以原图像的垂直中轴为中心,将图像分为左右两部分进行堆成变换。如图7-1所示:
垂直镜像通常是以原图像的水平中轴线为中心,将图像划分为上下两部分进行堆成变换的过程,示意图如图7-2所示。
在Python中主要调用OpenCV的flip()函数实现图像镜像变换,函数原型如下:
- dst = cv2.flip(src, flipCode)
– src表示原始图像
– flipCode表示翻转方向,如果flipCode为0,则以X轴为对称轴翻转,如果fliipCode>0则以Y轴为对称轴翻转,如果flipCode<0则在X轴、Y轴方向同时翻转。
下面代码是实现三个方向的翻转。
# -*- coding:utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #读取图片 img = cv2.imread('scenery.png') src = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #图像翻转 img1 = cv2.flip(src, 0) #参数=0以X轴为对称轴翻转 img2 = cv2.flip(src, 1) #参数>0以Y轴为对称轴翻转 img3 = cv2.flip(src, -1) #参数<0以X轴和Y轴翻转 #显示图形 titles = ['Source', 'Image1', 'Image2', 'Image3'] images = [src, img1, img2, img3] for i in range(4): plt.subplot(2,2,i+1), plt.imshow(images[i], 'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show()
输出结果如图7-3所示,图中“Source”为原始图像,“Image1”为以X轴为对称轴翻转或垂直镜像,“Image2”为以Y轴为对称轴翻转或水平镜像,“Images3”为以X轴和Y轴翻转。
二.图像仿射
图像仿射变换又称为图像仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。通常图像的旋转加上拉升就是图像仿射变换,仿射变换需要一个M矩阵实现,但是由于仿射变换比较复杂,很难找到这个M矩阵,OpenCV提供了根据变换前后三个点的对应关系来自动求解M的函数:
- cv2.getAffineTransform(pos1,pos2)
其中pos1和pos2表示变换前后的对应位置关系,输出的结果为仿射矩阵M,接着使用函数cv2.warpAffine()实现图像仿射变换。图7-4是仿射变换的前后效果图。
图像仿射变换的函数原型如下:
-
M = cv2.getAffineTransform(pos1,pos2)
– pos1表示变换前的位置
– pos2表示变换后的位置 -
cv2.warpAffine(src, M, (cols, rows))
– src表示原始图像
– M表示仿射变换矩阵
– (rows,cols)表示变换后的图像大小,rows表示行数,cols表示列数
实现代码如下所示:
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #读取图片 src = cv2.imread('scenery.png') #获取图像大小 rows, cols = src.shape[:2] #设置图像仿射变换矩阵 pos1 = np.float32([[50,50], [200,50], [50,200]]) pos2 = np.float32([[10,100], [200,50], [100,250]]) M = cv2.getAffineTransform(pos1, pos2) #图像仿射变换 result = cv2.warpAffine(src, M, (cols, rows)) #显示图像 cv2.imshow("original", src) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()
输出结果如图7-5所示:
三.图像透视
图像透视变换(Perspective Transformation)的本质是将图像投影到一个新的视平面,同理OpenCV通过函数cv2.getPerspectiveTransform(pos1,pos2)构造矩阵M,其中pos1和pos2分别表示变换前后的4个点对应位置。得到M后在通过函数cv2.warpPerspective(src,M,(cols,rows))进行透视变换。
图像透视变换的函数原型如下:
-
M = cv2.getPerspectiveTransform(pos1, pos2)
– pos1表示透视变换前的4个点对应位置
– pos2表示透视变换后的4个点对应位置 -
cv2.warpPerspective(src,M,(cols,rows))
– src表示原始图像
– M表示透视变换矩阵
– (rows,cols)表示变换后的图像大小,rows表示行数,cols表示列数
假设现在存在一张A4纸图像,现在需要通过调用图像透视变换校正图像。
图像透视变换的校正代码如下所示,代码中pos1表示透视变换前A4纸的四个顶点,pos2表示透视变换后A4纸的四个顶点。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #读取图片 src = cv2.imread('transform.jpg') #获取图像大小 rows, cols = src.shape[:2] #设置图像透视变换矩阵 pos1 = np.float32([[114, 82], [287, 156], [8, 322], [216, 333]]) pos2 = np.float32([[0, 0], [188, 0], [0, 262], [188, 262]]) M = cv2.getPerspectiveTransform(pos1, pos2) #图像透视变换 result = cv2.warpPerspective(src, M, (190, 272)) #显示图像 cv2.imshow("original", src) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()
最终输出结果如图7-7所示,它将图形校正显示。
四.总结
本章主要讲解Python和OpenCV的图像几何变换,详细介绍了图像镜像、图像仿射和图像透视,包括歪曲图像纠正的案例,希望大家喜欢。此外,这些知识点也是我们PC端或手机端图像处理应用常见的算法,读者可以尝试结合这些应用完成一套图像处理软件。
最近寒假日更,为了感谢读者。同时感谢在求学路上的同行者,不负遇见,勿忘初心。图像处理系列主要包括三部分,分别是:
这周的留言感慨~
十二年CSDN的博客分享,如果要说分享最让我开心的是什么?不是传道,不是授业,也不是解惑,而是接下来这类事。这些年已经陆续鼓励了一些朋友当老师,而昨天得知这一位博友真的去到新疆南疆成为了一名小学老师,我很是感动,是真的感动,六年前我曾鼓励他如果想,就放弃高额工资的互联网大厂,去做自己想做的,没想到已经当了四年老师。又当爹又当妈,国语普及,文化教育,这里面的艰辛不是一两句道得清,除了佩服就是鼓励。
正如你说的一样,“一辈子总得做点有意义的事情,生命实在太短暂,一定要活得积极、正面”。或许,这也是我在CSDN分享博客的最大意义,再比如云南那位老友的留言,“农村的孩子下雨没有伞,只能拼命奔跑”,希望你以后也能成为一名教师,感恩有你们,感谢有你们。我也希望自己早日毕业回到家乡,花上三四十年做好两件事,一是认真教书,二是将少数民族文物抢救和文字语音保护做好,也鼓励更多人一起加入进来。自己虽然很菜吧,但还是有一些喜欢的事,尤其陪伴爱的人,挺好,爱你们喔。2022年继续加油,在CSDN分享更高质量的博客和专栏。
(By:娜璋之家 Eastmount 2022-01-27 夜于贵阳 https://blog.csdn.net/Eastmount )
参考文献:
- [1]冈萨雷斯. 数字图像处理(第3版)[M]. 北京:电子工业出版社, 2013.
- [2]阮秋琦. 数字图像处理学(第3版)[M]. 北京:电子工业出版社,2008.
- [3]毛星云, 冷雪飞. OpenCV3编程入门[M]. 北京:电子工业出版社, 2015.
- [4]Eastmount. [Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移[EB/OL]. (2018-09-06). https://blog.csdn.net/Eastmount/article/details/82454335.
- [5]Eastmount. [数字图像处理] 六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解[EB/OL]. (2015-06-04). https://blog.csdn.net/Eastmount/article/details/46345299.
-
基于Matlab的点电荷镜像法电场的可视化.pdf
2021-06-23 11:05:30点电荷的镜像法是“电磁...本文用Matlab软件对镜像电场进行仿真,绘制了点电荷镜像法中多种镜像电场的等位面和电力线细节图,对镜像电场进行了可视化。可视化有利于加深学生对镜像法原理、镜像电荷和镜像电场分布的理解。 -
C# SolidWorks 二次开发 API ---批量修改工程图视角
2020-07-11 08:53:35这是前两周帮一个朋友做的一个小功能。仅仅是转换工程图中的视角选项。全部改为第一或者第三视角。这是前两周帮一个朋友做的一个小功能。仅仅是转换工程图中的视角选项。全部改为第一或者第三视角。
本来开始写好了exe,本地测试无问题。结果他们有加密软件,无法正常运行。又试了dll,还是不行。最后搞了个swp宏给他。
这真是要全能的节奏。
分析下功能:
要改视角,就是修改Soidworks中文档属性里面的一个选项。
然后为了实现批量,就是可以遍历文件夹下面的所有工程图,当然还要考虑工程图中有多个图纸的情况。但是好像文档属性定义了所有图纸的设置。我就没去细看了。
private void btnSelectFolder_Click(object sender, EventArgs e) { //选择文件夹对话框 FolderSelectDialog fsd = new FolderSelectDialog(); fsd.Title = "选择需要调整的工程图所在路径:"; fsd.Multiselect = false; if (fsd.ShowDialog()) { string[] dirs = fsd.FileNames; txtDrawomgPath.Text = dirs[0]; } } private void buttonStart_Click(object sender, EventArgs e) { if (radioFirst.Checked == false && radioThird.Checked == false) { MessageBox.Show("请先选择视角!"); return; } string[] files = Directory.GetFiles(txtDrawomgPath.Text, "*.slddrw", SearchOption.AllDirectories); SldWorks swApp = PStandAlone.GetSolidWorks(); if (swApp == null) { swApp = PStandAlone.RunSolidWorks(-1, true, false, false, 30, 15); } swApp.CommandInProgress = true; progressBar1.Maximum = files.Length; int nowFileCount = 0; foreach (string file in files) { progressBar1.Value = nowFileCount; Debug.Print(file); swApp.OpenDoc(file, (int)swDocumentTypes_e.swDocDRAWING); ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc; DrawingDoc drawingDoc = default(DrawingDoc); Sheet swSheet = default(Sheet); double[] sheetProperties = null; string activedSheetName = ""; drawingDoc = (DrawingDoc)swApp.ActiveDoc; if (drawingDoc != null) { activedSheetName = ((Sheet)drawingDoc.GetCurrentSheet()).GetName(); var sheetNames = (string[])drawingDoc.GetSheetNames(); for (int i = 0; i < sheetNames.Length; i++) { //var sheet = drawingDoc.Sheet[sheetNames[i]]; drawingDoc.ActivateSheet(sheetNames[i]); // Active sheet is Sheet2 swSheet = (Sheet)drawingDoc.GetCurrentSheet(); sheetProperties = (double[])swSheet.GetProperties2(); int prop1; int prop2; bool prop5; bool prop8; prop1 = (int)System.Convert.ToInt32(sheetProperties[0]); prop2 = (int)System.Convert.ToInt32(sheetProperties[1]); if (radioFirst.Checked == true) { prop5 = true; } else { prop5 = false; } //prop5 = (bool)System.Convert.ToBoolean(sheetProperties[4]); prop8 = (bool)System.Convert.ToBoolean(sheetProperties[7]); prop8 = true; swSheet.SetProperties2(prop1, prop2, sheetProperties[2], sheetProperties[3], prop5, sheetProperties[5], sheetProperties[6], prop8); swModel.EditRebuild3(); } } drawingDoc.ActivateSheet(activedSheetName); swModel.EditRebuild3(); swModel.Save(); swApp.CloseDoc(file); nowFileCount = nowFileCount + 1; } swApp.CommandInProgress = false; progressBar1.Value = progressBar1.Maximum; swApp.SendMsgToUser("视角转换完成!"); }
宏的链接:
https://download.csdn.net/download/zengqh0314/12600462 -
一种将球面图像投影至平面图像的方法与流程
2020-12-22 06:37:48本发明涉及图像投影技术领域,具体涉及一种将球面图像投影至平面图像的方法。背景技术:球面全景视频投影是指将球面上每个经纬度对应点以一定方式映射到平面上,VR全景视频的存储必须通过球面全景视频投影将球面视频...本发明涉及图像投影技术领域,具体涉及一种将球面图像投影至平面图像的方法。
背景技术:
球面全景视频投影是指将球面上每个经纬度对应点以一定方式映射到平面上,VR全景视频的存储必须通过球面全景视频投影将球面视频投影至平面视频。几十年来,许多学者对球体投影进行了大量研究,并提出多种不同投影方法以使得投影过程更均匀连续。
其中,等柱状投影法作为最简单的球面投影方法,简单地把经纬度转换为横纵坐标,在所有纬度上采用相同采样点数来保存球面图像,从而能将球面图像映射为矩形图像,因而获得了广泛的关注。然而,其最大的缺陷在于:相比赤道而言,球体两极面积小,像素点多,因此,高质量区域在南、北极两端,赤道最差,若图像主题在中央,就导致中央不清晰,这导致等柱状投影法在很多潜在应用中受到限制。
在最近的研究工作中,出现了很多球面图像投影至平面图像的算法,如:等柱状投影法,立方体投影法,等角立方体投影法,八面体投影法和二十面体投影法等,但是大多数方法都不能对图像保持均匀性和连续性。
技术实现要素:
有鉴于现有技术的上述缺陷,本发明提供了一种将球面图像投影至平面图像的方法,其具体技术方案如下:
本发明提供了一种将球面图像投影至平面图像的方法,包括以下步骤:
步骤1、将球面图像分解为上下两个半球;
步骤2、将所述上下两个半球分别像素均匀地投影至两个单位圆;
步骤3、将所述两个单位圆映射为两个与所述单位圆同心的正方形;
步骤4、对两个正方形图像进行旋转、分割后拼接为一个大正方形图像。
优选地,上述方法还包括:对所得图像进行连续性、均匀性分析。
优选地,上述步骤1中,球体赤道往上部分记作上半球,球体赤道往下部分记作下半球,将球面图像沿赤道分解为上下两个半球。
优选地,上述步骤2中,取单位圆并以单位圆中心为原点分别以u、v为横、纵坐标建立平面直角坐标系,每个单位圆上图像的像素点(u,v)取球面图像上经纬度为的像素点,所述单位圆上(u,v)坐标对应球面坐标如下:
其中,所述的球面图像,经度θ取值范围是[-180,180],纬度取值范围是[-90,90],对于所述的单位圆,u、v的取值范围是[-1,1],且满足等式:
u2+v2=1
优选地,上述步骤3中,取边长为2的正方形,以正方形中心为原点建立分别以x、y为横、纵坐标的平面直角坐标系,所述正方形图像上每个像素点(x,y)取所述单位圆图像上对应像素点(u,v),所述正方形图像上像素点坐标(x,y)对应所述单位圆图像上像素点坐标(u,v)如下:
其中,所述的平面正方形图像,x、y的取值范围是[-1,1]。
优选地,上述步骤4中,将上一步得到的两个同心正方形记为第一个正方形和第二个正方形,先将第一个正方形沿对角线分割得到四个三角形,并将分割之后得到的上下左右四个三角形分别以斜边对应第二个正方形边的形式,拼接至第二个正方形对应的上下左右四条边上,确保上下左右顺序正确,能够得到最终连续的两个正方形拼接而成的正方形,再对拼接之后的正方形沿着中心顺时针旋转45度可得到最终正常形态的正方形图像。
在将球面图像投影至平面图像后,优选地利用内部像素相关联性较强的图片对所得图像进行连续性分析,用直线纹理来表示图形完整性,投影之后直线条纹断裂可以直观展现出其不连续性。
优选地,对所得到图像进行均匀性分析的方法为:用投影平面面积到球面面积的面积拉伸比来直观地测量投影带来的像素密度均匀性,而投影面积拉伸比需要通过投影公式的雅可比矩阵计算得到。
其中,所述的从球面保面积投影为平面圆形雅可比矩阵计算如下:
其中,雅可比矩阵计算得到为常数,即球面任意区域投影到平面圆具有相同拉伸比。
其中,所述的从平面圆形保面积映射为单位正方形雅可比矩阵计算如下:
当|a|≥|b|时,有雅可比矩阵:
当|a|<|b|时,有雅可比矩阵:
其中,雅可比矩阵计算得到为常数,即平面圆任意区域投影至平面正方形都有相同面积拉伸比。
在较优实施例中,上述图像均为视频图像;上述球面图像为全景视频图像。
本发明提供了一种将球面图像尤其是球面视频图像均匀连续地投影至平面正方形图像的算法,旨在解决球面视频投影的均匀性和连续性问题,提高在相同视频体积下得到视频的效果。该算法能显著提高球面视频投影的连续性和均匀性,并在投影之后得到空间利用率更高的视频。
应理解,在本发明范围内,本发明的上述各技术特征和在下文(如实施例)中具体描述的各技术特征之间都可以互相组合,从而构成新的或优选的技术方案。限于篇幅,在此不再一一累述。所以凡是不脱离本发明所公开的原理下完成的等效或修改,都落入本发明保护的范围。
以下将结合附图对本发明作进一步说明,以充分说明本发明的目的、技术特征和技术效果。
附图说明
图1示出了本发明较优实施例中将球面视频图像投影至平面正方形视频图像的算法流程示意图;
图2示出了本发明较优实施例中将两个半球面分别像素均匀地投影至单位平面圆盘示意图;
图3示出了本发明较优实施例中将两个同心圆盘分别映射为同心正方形示意图;
图4示出了本发明较优实施例中将两个正方形图像进行旋转、分割后拼接为一个正方形图像示意图;
图5示出了本发明较优实施例中对球体进行投影之后得到的连续性测试图像示意图。
具体实施方式
应当理解本文所用的术语其目的仅在于描述具体实施方案,并且不意图是限制性的,本发明的范围将仅由所附的权利要求书限制。
图1示出了将球面视频图像投影至平面正方形视频图像的算法流程示意图,下面对其中每个步骤进行详细说明。
步骤1、将球面视频分解为上下两个半球
作为预处理部分,算法将球体分成两部分,其中赤道往上部分记作上半球,球体赤道往下部分记作下半球,沿赤道切开得到上下两个半球。
步骤2、利用均匀的投影方式将上下两个半球投影至两个单位圆
假设存在平面上一个单位圆,以该单位圆的圆心为原点并分别以u、v为横、纵坐标建立平面直角坐标系,对每个单位圆上的点(u,v)对应的像素点,取球面视频图像上经纬度为所对应的像素点,其中圆上(u,v)坐标对应球面坐标如下:
参见图2,其示出了将两个半球面分别像素均匀地投影至单位平面圆盘的示意图。
步骤3、将两个单位圆映射为两个与单位圆同心的正方形
假设存在平面上边长为2的正方形,以该正方形中心为原点并分别以x、y为横、纵坐标建立平面直角坐标系,对每个正方形上的点(x,y)对应的像素点,其中x、y的取值范围是[-1,1],取单位圆视频图像上对应像素点(u,v),其中(x,y)对应(u,v)坐标如下:
参见图3,其示出了将两个同心圆盘分别映射为同心正方形的示意图。
步骤4、对两个正方形图像进行旋转、分割后拼接为一个正方形图像
将上一步得到的两个同心正方形记为第一个正方形和第二个正方形,先将第一个正方形沿对角线分割得到四个三角形,并将分割之后得到的上下左右四个三角形分别以斜边对应第二个正方形边的形式,拼接至第二个正方形对应的上下左右四条边上,确保上下左右顺序正确,能够最终连续的两个正方形拼接而成的正方形,再对拼接之后的正方形沿着中心顺时针旋转45度可得到最终正常形态的正方形图像。
参见图4,其示出了将两个正方形图像进行旋转、分割后拼接为一个正方形图像的示意图;
利用关联性较强的视频图片来检测连续性,球形视频中每一经度都取相同条纹,在球体投影之后直线条纹断裂可以直观展现不连续性,如图5所示,图中虚线部分表示拼接过程中的连续边,可观察到拼接处纹理相接,即不存在不连续边。
其中均匀性利用投影公式的雅可比矩阵计算投影面积拉伸比,球面保面积投影为平面圆形雅可比矩阵计算如下:
其中,雅可比矩阵计算得到为常数,即球面任意区域投影到平面圆具有相同拉伸比。
其中,所述的从平面圆形保面积映射为单位正方形雅可比矩阵计算如下:
当|a|≥|b|时,有雅可比矩阵:
当|a|<|b|时,有雅可比矩阵:
其中,雅可比矩阵计算得到为常数,即平面圆任意区域投影至平面正方形都有相同面积拉伸比,投影具有非常好的均匀性。
上述算法能够更有效地提高球面视频投影效率,大量减少投影过程的拉伸,显著提高球面视频投影的连续性、均匀性。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思做出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
-
镜像双目视觉精密测量技术综述
2021-01-25 17:21:51综述了镜像双目视觉测量技术的发展现状,从测量原理及传感器、测量模型及标定、测量精度及评价等方面分析了镜像双目视觉测量结构模型,主要包括基于平面折反射的镜像双目结构和基于曲面折反射的镜像双目结构,总结了... -
基于镜像映射原理的LNG液舱压力维持系统H
2021-01-12 17:52:36对该压力维持系统的非线性数学模型进行线性化处理,得到一类具有积分不稳定时滞形式 的线性模型,采用镜像映射技术将该模型的不稳定极点映射到其关于虚轴对称的复平面左半平面,构建其镜像稳定模型.进而采用H∞最小灵敏... -
基于Matlab的电磁场与波“镜像电荷法”仿真——平面导体劈的点电荷镜像
2022-04-04 14:11:47平面导体劈的镜像电荷法仿真 -
【图形与渲染】相机平面镜反射与斜裁剪矩阵(上)-镜像矩阵
2018-03-08 23:47:48平面镜反射是一种常用的实时渲染效果,且在许多游戏中都可以见到它的身影。 通常游戏中实现实时反射的方法有如下几种: 1.使用cubemap或预先烘焙反射探针 2.平面镜反射 3。屏幕空间反射(SSR) 三种方式进行... -
CSS下镜像翻转(水平/垂直翻转)
2021-07-06 10:16:00css下镜像翻转两种写法: 利用css动画属性rotate旋转来实现: .mirrorRotateLevel { transform: rotateY(180deg); /* 水平镜像翻转 */ } .mirrorRotateVertical { transform: rotateX(180deg); /* 垂直镜像翻转 ... -
光学相干层析成像中无群延迟的空间载频消镜像方法
2021-02-13 12:55:56提出了一种无群速度延迟的空间载频谱域光学...介绍了谱域OCT中无群速度延迟的空间载频消镜像方法的实验原理与实验系统,实验研究了平面镜样品在不同调制频率下的成像效果,并给出了平面镜和手指样品消镜像后的OCT图像。 -
Mooc_AutoCAD绘制建筑施工图_单元平面图测验题
2020-05-11 10:05:08单元平面图测验题1. 用MIRROR命令镜像复制一个物体时必须事先画好对称轴。( )2. 镜像指令所复制图形的对称线的位置是___。3. 镜像文本要保持正显,那么其相关变量MIRRTEXT设置为___。4. 绘制梯井和扶手图形,并将... -
相对于任意平面的镜像变换矩阵
2012-09-13 10:14:44图中的v代表将要变换的点、v'是v相对于平面镜像变换后的点、n是平面的法向量,在讨论中,我们始终假设n为单位向量、k是自v到该平面的最短有向距离、q是平面上距离点v最近的点、d是原点到平面的最短有向距离。... -
Opencv之图像平移、镜像
2016-09-12 14:27:17图像的平移、旋转、镜像都是图像处理的基本功,按理说我现在研究它,有点晚了,但我还是抽些时间写下吧,弥补过去的无所事事。 一、图像的平移 我们设现在的像素点是(x,y),水平平移距离dx=dy,那么平移后的像素... -
Android实现图片 高斯模糊,以及图片镜像 翻转。
2016-10-21 00:14:16速速找了网上比较感兴趣的功能,,看着前人大神门的方法实现,方便自己也方便别人:上图: 代码:MainActivity.classpackage com.hero.zhaoq.bitmapdemo;import android.graphics.Bitmap; import android.graphics... -
镜像矩阵(Reflection)
2018-09-28 19:39:42镜像(反射)矩阵是n维空间中的沿n-1维平面的一种矩阵变换,常见的应用场景是在2维空间图像处理、3维空间物体场景变换。先直观看看镜像变换的效果: 直观的感受了镜像变换的效果之后,接下来我们看看这个变换... -
DirectX11 平面镜像的实现
2015-10-04 19:58:31平面镜像的实现在自然界中有许多物体的表面都非常光滑,可以像镜子一样反射周围的物体。本节介绍了如何在3D应用程序中模拟镜像效果。为简单起见,我们降低了任务难度,只在平面上实现镜像效果。例如,一辆光滑的汽车... -
MFC空间几何变换之图像平移、镜像、旋转、缩放
2018-07-23 17:06:41本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程《数字图像处理》及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移、图形旋转、图像反转倒置镜像和图像... -
Numpy 进阶(二) —— 对图像进行角度旋转、水平、垂直镜像操作!
2020-03-29 23:56:28用 Python 对图片做旋转、镜像操作时,小伙伴们可能首先想到的是 PIL 、Opencv 等图像处理程序包,只需要一行代码就可以实现目标转换。 这样做的确能够实预期目标,但图像是怎么实现旋转的,这个过程对我们来说就像... -
【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解
2015-06-04 17:28:35本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程《数字图像处理》及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移、图形旋转、图像反转倒置镜像和图像... -
[Linux] 编写Dockerfile文件自动构建镜像
2021-05-17 10:51:12Dockerfile是一个文本文件,按顺序包含构建给定镜像所需的所有命令Docker通过读取Dockerfile中的指令自动构建图像 。 Dockerfile遵循特定的格式和指令集,您可以在Dockerfile引用中找到它们。 Docker镜像由只读层... -
用matlab绘制图片灰度的三维图像
2019-03-14 17:13:42为了便于观察图像的像素值分布,我们常常需要将灰度图像化成三维图,观察起来更加直观。mesh()画出来的图可能发生垂直镜像,只要再镜像一次就好了,mesh(flipdim(你的图,1))。 -
如何优雅的在 Kubernetes 集群中缓存容器镜像
2021-12-22 00:26:08公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !介绍当容器化应用部署到Kubernetes集群时,K8s控制平面会将Pod调度到集群中的工作节点。运行... -
高级pcb看图软件Software Companions Gerbview.rar
2021-10-09 22:24:44将负 Gerber 层(例如电源平面)反转为正以进行正确显示和转换。 旋转、镜像和缩放图层。 可以单独设置所有加载文件的可见性。 可以添加用户定义的页眉和页脚进行打印。 彩色或黑白打印。 缩放打印或适合纸张。 全... -
基于多平面镜的单相机三维采集方法
2021-02-07 06:30:35展示了所构建的基于四平面镜的单相机三维(3D)采集系统, 介绍了系统所采用的三维扫描的几何光路, 分析了从图像解析出高度的3D采集算法、空间分辨率与图像分辨率的关系, 也讨论了算法的优化以及3D再现技术。... -
unity如何实现画面左右反转(镜像)效果
2016-08-08 11:55:47只要把如下代码绑定到相机便可: using UnityEngine; using System.Collections; public class MirrorCamera : MonoBehaviour { // Use this for initialization ... MirrorFlipCamera(thi -
Matlab figure镜像绘图,no imread
2020-04-12 22:00:42最近处理数据,需要把对称模型进行镜像得到完整模型。网上查找,关于matlab图像镜像处理的文章大多是imread读入图片,然后对色彩矩阵进行处理。或者是用mirror/flidim...如果关于xoz平面镜像,数据应修改为(X,-Y,Z,... -
java – 如何在OpenGL中绘制镜像镜像?
2021-03-13 15:42:46有两种常见的方法来渲染具有多个/递归反射的反射……>渲染到纹理并将该纹理应用于...如果镜子不是完美的平面,您也可以使用此方法,例如,这适用于水中的涟漪.事实上,这甚至可以使用立方体贴图进行扩展,以支持近似任...