无人机视角展示(无人机图像定位 )--某数学建模A题MATLAB代码

article/2025/3/15 17:06:09

近期没啥空,水个简单的。。。。
目前只写了第一问,有空再写。。。。。

问题描述

无人驾驶飞机简称“无人机”,是利用无线电遥控设备和自备的程序控制装置操纵的不载人飞机。搭载图像设备的无人机在高空航拍、区域巡视、军事侦查等方面有广泛应用。2018 年 9 月,世界海关组织协调制度委员会将无人机归类为“会飞的照相机”。
在这里插入图片描述
利用拍摄的图像对无人机所处的位置及其拍摄姿态进行确定是一项重要的技术。某平坦区域可近似看成水平面,现用某型号无人机对此区域进行巡视。以地面为𝑥𝑜𝑦面,竖直向上方向为𝑧轴按右手系建立直角坐标系。无人机在拍摄图像时,其对称中心平面𝑆始终保持竖直,记平面𝑆相对于𝑥𝑜𝑧面的的方位角为𝜃(0 ≤ 𝜃 ≤ 360°),即𝜃 = 0°时,无人机朝向𝑥轴正向;𝜃 = 90°时,无人机朝向𝑦轴正向。无人机的云台可上下调节照相机的拍摄角度,记镜头中心轴与水平面所夹的俯视角为𝜑(0 ≤ 𝜑 ≤ 90°),即𝜑 = 0°时,镜头水平;𝜑 = 90°时,镜头竖直朝下。这样,无人机的位置和拍摄角度就可以用五元组(𝑥, 𝑦, 𝑧, 𝜃,𝜑)刻画,以下简称为无人机的状态。
在这里插入图片描述
为确定无人机的状态,在其巡视区域上设置若干标记点(可看成点光源),其坐标数据见附件一。当无人机以某状态进行拍摄时,这些标记点的像就会出现在照片上。已知无人机的相机镜头为定焦,其水平视角𝛼 = 60°,所拍摄照片的像素为 840*630。
在这里插入图片描述
1: 当 无 人 机 的 状 态 分 别 为 (40,30,20,210°, 55°) 和(−20,40,35,43°, 27°)时,绘制出拍摄的(标记点的)照片。需提供单独的 jpg 文件

第一问函数

其实想要简单写不用写这么麻烦,后面部分主要为了画示意图:

function getViewUAV(coe)% 无人机参数设置
UAV.Pos=coe(1:3);%[40,30,20];
UAV.Theta=coe(4);
UAV.Phi=coe(5);
UAV.Alpha=60;
UAV.Img_Row=630;
UAV.Img_Col=840;% 读取数据
dataPos=readmatrix('标记点坐标.xls');% 数据计算
r=tan((90-UAV.Phi)/180*pi)*UAV.Pos(3);
R=UAV.Pos(3)/cos((90-UAV.Phi)/180*pi);
Lcol_=R*tan(UAV.Alpha/2/180*pi);
Lrow_=Lcol_/UAV.Img_Col*UAV.Img_Row;% 目标点坐标
targetPos=[UAV.Pos(1)+r*cos(UAV.Theta/180*pi),...UAV.Pos(2)+r*sin(UAV.Theta/180*pi),0];
targetV=targetPos-UAV.Pos;% 中轴线坐标       
midLPos=[targetPos(1)+Lcol_*cos(UAV.Theta/180*pi+pi/2),...targetPos(2)+Lcol_*sin(UAV.Theta/180*pi+pi/2),0];
midRPos=[targetPos(1)+Lcol_*cos(UAV.Theta/180*pi-pi/2),...targetPos(2)+Lcol_*sin(UAV.Theta/180*pi-pi/2),0];    
midL_V=midLPos-UAV.Pos;
midR_V=midRPos-UAV.Pos;
norm_V=cross(midL_V,midR_V);
norm_V=norm_V./norm(norm_V).*sign(norm_V(3));% 垂直平面框
LUPos=midLPos+norm_V.*Lrow_;
RUPos=midRPos+norm_V.*Lrow_;
LDPos=midLPos-norm_V.*Lrow_;
RDPos=midRPos-norm_V.*Lrow_;
LU_V=LUPos-UAV.Pos;
RU_V=RUPos-UAV.Pos;
LD_V=LDPos-UAV.Pos;
RD_V=RDPos-UAV.Pos;% 地面梯形框
LUPos0=UAV.Pos+LU_V./(UAV.Pos(3)-LUPos(3)).*UAV.Pos(3);
RUPos0=UAV.Pos+RU_V./(UAV.Pos(3)-RUPos(3)).*UAV.Pos(3);
LDPos0=UAV.Pos+LD_V./(UAV.Pos(3)-LDPos(3)).*UAV.Pos(3);
RDPos0=UAV.Pos+RD_V./(UAV.Pos(3)-RDPos(3)).*UAV.Pos(3);% 查找梯形框内的点
polygon_X=[LUPos0(1),RUPos0(1),RDPos0(1),LDPos0(1)];
polygon_Y=[LUPos0(2),RUPos0(2),RDPos0(2),LDPos0(2)];
[in,on]=inpolygon(dataPos(:,1),dataPos(:,2),polygon_X,polygon_Y);
inpolygonPos=dataPos(in|on,:);% 求地面梯形框内点与无人机的连线与目标平面交点
inpolygonVSet=inpolygonPos-UAV.Pos;
inpolygonLSet=sum(inpolygonVSet.*(targetV./norm(targetV)),2);
inpolygonRateSet=norm(targetV)./inpolygonLSet;
inboxPos=inpolygonVSet.*inpolygonRateSet+UAV.Pos;% 映射到840*630方框
XYPos=inboxPos(:,1:2);
XYV=XYPos-UAV.Pos(1:2);
tTheta=((360-UAV.Theta)+90)/180*pi;
XYPos=[XYV(:,1).*cos(tTheta)-XYV(:,2).*sin(tTheta),...XYV(:,2).*cos(tTheta)+XYV(:,1).*sin(tTheta)]+UAV.Pos(1:2);
LDV=LDPos(1:2)-UAV.Pos(1:2);
XYPos00=[LDV(1).*cos(tTheta)-LDV(2).*sin(tTheta),...LDV(2).*cos(tTheta)+LDV(1).*sin(tTheta)]+UAV.Pos(1:2);Lcol=2*Lcol_;
Lrow=2*Lrow_*cos((90-UAV.Phi)/180*pi);
XYPos=(XYPos-XYPos00)./[Lcol,Lrow].*[UAV.Img_Col,UAV.Img_Row];% 绘制散点图
figure()
ax=gca;
hold(ax,'on')
ax.XLim=[0,UAV.Img_Col];
ax.YLim=[0,UAV.Img_Row];
ax.XTick=[];ax.XColor='none';
ax.YTick=[];ax.YColor='none';
outerpos=ax.OuterPosition;
ti=ax.TightInset;
left=outerpos(1) + ti(1);
bottom=outerpos(2) + ti(2);
ax_width=outerpos(3) - ti(1) - ti(3);
ax_height=outerpos(4) - ti(2) - ti(4);
ax.Position=[left bottom ax_width ax_height];
scatter(XYPos(:,1),XYPos(:,2),15,'filled','CData',[0 0 0])
saveas(ax,['c',num2str(coe),'.png'])
tImg=imread(['c',num2str(coe),'.png']);
tImg=imresize(tImg,[UAV.Img_Row,UAV.Img_Col]);
imwrite(tImg,['c',num2str(coe),'.png']);% 映射示意图
figure()
ax=gca;
hold(ax,'on')
grid(ax,'on')
ax.DataAspectRatio =[1 1 1];
ax.DataAspectRatioMode='manual';
scatter3(UAV.Pos(1),UAV.Pos(2),UAV.Pos(3),30,'filled')
scatter3(targetPos(1),targetPos(2),targetPos(3),30,'filled')
scatter3(dataPos(:,1),dataPos(:,2),dataPos(:,3),3,'filled','CData',[0 0.251 0.451])
plot3([UAV.Pos(1),targetPos(1)],[UAV.Pos(2),targetPos(2)],[UAV.Pos(3),targetPos(3)],...'LineWidth',2,'Color','k');
plot3([midLPos(1),midRPos(1)],[midLPos(2),midRPos(2)],[midLPos(3),midRPos(3)],...'LineWidth',2,'Color',[0.8,0.2,0.2]);
fill3([LUPos(1),RUPos(1),RDPos(1),LDPos(1)],...[LUPos(2),RUPos(2),RDPos(2),LDPos(2)],...[LUPos(3),RUPos(3),RDPos(3),LDPos(3)],[0.3,0.3,0.3],'FaceAlpha',0.3)
fill3([LUPos0(1),RUPos0(1),RDPos0(1),LDPos0(1)],...[LUPos0(2),RUPos0(2),RDPos0(2),LDPos0(2)],...[LUPos0(3),RUPos0(3),RDPos0(3),LDPos0(3)],[0.3,0.3,0.6],'FaceAlpha',0.2)
plot3([LUPos0(1),UAV.Pos(1)],[LUPos0(2),UAV.Pos(2)],[LUPos0(3),UAV.Pos(3)],'Color',[0.3,0.3,0.6])
plot3([RUPos0(1),UAV.Pos(1)],[RUPos0(2),UAV.Pos(2)],[RUPos0(3),UAV.Pos(3)],'Color',[0.3,0.3,0.6])
plot3([LDPos(1),UAV.Pos(1)],[LDPos(2),UAV.Pos(2)],[LDPos(3),UAV.Pos(3)],'Color',[0.3,0.3,0.6])
plot3([RDPos(1),UAV.Pos(1)],[RDPos(2),UAV.Pos(2)],[RDPos(3),UAV.Pos(3)],'Color',[0.3,0.3,0.6])end

xls文件:
链接: https://pan.baidu.com/s/1uoAG9M2LEK3Obt-D6lHpOA
提取码: pntp

使用方式

命令行或新m文件运行如下代码:

getViewUAV([40,30,20,210,55])
getViewUAV([-20,40,35,43,27])

使用效果

密恐深入

[40,30,20,210,55]
拍摄效果:

在这里插入图片描述
无人机示意图:

在这里插入图片描述
在这里插入图片描述
照到了边角
[-20,40,35,43,27]
拍摄效果:

在这里插入图片描述
无人机示意图:
在这里插入图片描述
在这里插入图片描述

后记

由于最近确实是挺忙的,后面几问也没咋做,不过感觉可以先尝试估计图形中点的密度之后,将图像密度分布均匀化之后点集配准,或者估计密度后根据密度设置无人机角度范围之后不断改变各个参数循环硬搜之类的。。。。如果有人看可以考虑有空试着写写hiahiahia


http://chatgpt.dhexx.cn/article/RDJ5FXfm.shtml

相关文章

2020 全国大学生数学建模竞赛C题思路+代码

题目链接:天翼云盘 珍藏美好生活 家庭云|网盘|文件备份|资源分享 前言 又是一年数据挖掘题型,第一次接触这种题型还是在去年的mathorcup上,这种题的难度就在于指标的建立和数据的处理上。后面会出一份关于数据挖掘题型,我的相关经…

PU learning半监督学习

半监督学习 Positive-unlabeled learning 什么是半监督学习 让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能,就是半监督学习(semi-supervised learning)。 要利用未标记样本,必然要做一些将未标记样本所揭示的数…

详解基于图卷积的半监督学习

Kipf和Welling最近发表的一篇论文提出,使用谱传播规则(spectral propagation)快速近似spectral Graph Convolution。 和之前讨论的求和规则和平均规则相比,谱传播规则的不同之处在于聚合函数。它使用提升到负幂的度矩阵D对聚合进行…

【半监督医学图像分割 2023】RCPS

文章目录 【半监督医学图像分割 2023 】RCPS摘要1. 介绍2. 相关工作2.1 医学图像分割2.1 半监督学习2.3 对比学习 3. 方法3.1 整体概述3.2 纠正伪监督3.3 双向Voxel对比学习。 4. 实验 【半监督医学图像分割 2023 】RCPS 论文题目:RCPS: Rectified Contrastive Pseu…

半监督之数据增强

目录 前言 传统常见的 Free Lunch for Few-shot Learning: Distribution Calibration Learning to Augment for Data-Scarce Domain BERT Knowledge Distillation MixText: Linguistically-Informed Interpolation of Hidden Space for Semi-Supervised Text Classificati…

半监督的语义分割

现阶段传统的语义分割已经逐渐走向瓶颈,你设计一个网络,修改一下U-Net增加一个模块,现在已经很难再出优秀的成果,大家对你的创新程度认可度也越来越低。所以现在大家在进行语义分割的时候往往需要自行创造出一些需求,比…

半监督学习介绍

转载地址 https://blog.csdn.net/ice110956/article/details/13775071 什么是半监督学习? 传统的机器学习技术分为两类,一类是无监督学习,一类是监督学习。 无监督学习只利用未标记的样本集,而监督学习则只利用标记的样本集进行学习。 但…

半监督目标检测相关方法总结

戳我,查看GAN的系列专辑~! 等你着陆!【GAN生成对抗网络】知识星球! 作者丨kinredon知乎 编辑丨极市平台 来源丨https://zhuanlan.zhihu.com/p/404160115 近期阅读了一些半监督目标检测(Semi-Supervised Object Detecti…

半监督深度学习

个人博客:wyxogo.top 半监督学习 在有标签数据无标签数据混合成的训练数据中使用的机器学习算法。一般假设,无标签数据比有标签数据多,甚至多得多。 要求: 无标签数据一般是有标签数据中的某一个类别的(不要不属于的…

半监督学习深度学习算法

该文章主体摘自知乎糯米稻谷的文章,对一些细节添加了自己的理解 文章链接https 半监督学习 啥是半监督学习(Semi-supervised Learning)1.简单自训练(simple self-training)2.协同训练(co-training&#xff…

深度半监督学习方法总结

深度神经网络已被证明在对大量标记数据进行监督学习的训练中是非常有效的。 但是大多数现实世界的数据并没有被标记,并且进行全部标记也是不太现实的(需要大量的资源、时间和精力)。 为了解决这个问题半监督学习 ( semi-supervised learning)…

深度半监督学习

半监督学习介绍 Zhu X, Goldberg A B. Introduction to semi-supervised learning[J]. Synthesis lectures on artificial intelligence and machine learning, 2009, 3(1): 1-130. 链接半监督 无监督学习:主要目的是从独立同分布采样中得到的n个独立样本中找到in…

半监督SVM

半监督SVM 什么是半监督学习半监督SVM要做什么TSVM 这里是阅读周志华的《机器学习》中关于半监督SVM(S3VM)的笔记。 什么是半监督学习 在数据的搜集中,获得标记数据的成本是高昂的,而获得未标记的数据则是低廉的,为此…

半监督学习代码实战

sklearn官方例子——用半监督学习做数字识别 什么是半监督学习 半监督学习很重要,为什么呢?因为人工标注数据成本太高,现在大家参加比赛的数据都是标注好的了,那么如果老板给你一份没有标注的数据,而且有几百万条&am…

半监督学习综述

Chapter 7 Semi-supervised Learning 翻译不易,未经允许请勿转载! Author: Mohamed Farouk Abdel Hady and Friedhelm Schwenker Translator: Howard Wonanut 摘要 传统的监督学习方法需要使用有标签数据建立模型。然而,在现实世界中给训练…

半监督学习(一)

什么是半监督学习? 传统的机器学习技术分为两类,一类是无监督学习,一类是监督学习。 无监督学习只利用未标记的样本集,而监督学习则只利用标记的样本集进行学习。 但在很多实际问题中,只有少量的带有标记的数据,因为…

半监督学习简介

“我们预计从长远来看,无监督学习将变得更加重要。人类和动物的学习在很大程度上是不受监督的:我们通过观察来发现世界的结构,而不是通过被告知每个物体的名称。”——LeCun, Bengio, Hinton, Nature (2015)。 Semi-Supervised Learning 半监…

半监督学习

1. 介绍 1.1 什么是半监督学习 所给的数据有的是有标签的,而有的是没有标签的。常见的两种半监督的学习方式是直推学习(Transductive learning)和归纳学习(Inductive learning)。   直推学习(Transduct…

半监督学习(SEMI-Supervised Learning)

半监督学习的工作原理 想象一下,收集了大量未标记的数据,您想在这些数据上训练模型。手动标记所有这些信息可能会花费你一大笔钱,除了需要几个月的时间来完成注释。这时候半监督机器学习方法就派上用场了。工作原理很简单。无需将标签添加到…

半监督学习概述

1、半监督学习 今天在阅读一篇论文时了解了这个之前一直不太清晰的概念。下面是查阅了相关资料后对半监督学习的理解。如有错误,望更正。 半监督学习是一种介于监督学习和无监督学习之间的学习凡是,我们都知道,在监督学习中,样本…