网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月10日
漏签
0
天
巩义二中吧
关注:
6,829
贴子:
587,240
看贴
图片
吧主推荐
视频
游戏
12
回复贴,共
1
页
<<返回巩义二中吧
>0< 加载中...
一个单目定位问题
取消只看楼主
收藏
回复
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
如上图所示的地转,是由手机摄像头拍照的。
地砖上下左右四点,在全尺寸摄像头的像素坐标分别为:
下(2021,1693)
左(1700,1458)
右(2431,1464)
上(2102,1268)
摄像头参数也已经列出,求是否能得到相机相对地砖中心点的距离和方位角。
我不确定是否有解。
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
import numpy
input_params = {
"pt":{
"down":[2021,1693],
"left":[1700,1458],
"right":[2431,1464],
"up":[2102,1268]
},
"camer":{
"image_size":[4624, 2064],
"focal_length":25e-2
}
}
def calc_camera_pos(input_params):
print(input_params)
if __name__ == "__main__":
calc_camera_pos(input_params)
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
from tkinter import Y
import numpy as np
input_params = {
"pt":{
"down":[2021,1693],
"left":[1700,1458],
"right":[2431,1464],
"up":[2102,1268]
},
"camera":{
"image_size":[4624, 2064],
"focal_length":25e-2
}
}
def get_two_points_angle(pt1, pt2, focal_length):
x = np.abs(pt1[0] - pt2[0]);
y = np.abs(pt1[1] - pt2[1]);
lenInPos = np.sqrt(x*x + y*y)
angle = np.arctan2(lenInPos, focal_length)
return (angle, lenInPos, x, y)
def get_four_edge_angle(input_params):
up_left, _, _, _ = get_two_points_angle(input_params["pt"]["up"],input_params["pt"]["left"], input_params["camera"]["focal_length"]);
up_right, _, _, _ = get_two_points_angle(input_params["pt"]["up"],input_params["pt"]["right"], input_params["camera"]["focal_length"]);
down_left, _, _, _ = get_two_points_angle(input_params["pt"]["down"],input_params["pt"]["left"], input_params["camera"]["focal_length"]);
down_right, _, _, _ = get_two_points_angle(input_params["pt"]["down"],input_params["pt"]["right"], input_params["camera"]["focal_length"]);
return (up_left, up_right, down_left, down_right)
def calc_camera_pos(input_params):
print(input_params)
edgeAngles = get_four_edge_angle(input_params)
print(edgeAngles)
if __name__ == "__main__":
calc_camera_pos(input_params)
返回值:
{'pt': {'down': [2021, 1693], 'left': [1700, 1458], 'right': [2431, 1464], 'up': [2102, 1268]}, 'camera': {'image_size': [4624, 2064], 'focal_length': 0.25}}
(1.570234073207835, 1.5701435141642968, 1.5701679123802046, 1.5702639791980226)
有趣,似乎我只是验算了4边相对摄像机镜头的夹角相等。
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
额外打印了四边长,这次有差异出现:
(444.63917956023624, 382.95822226451804, 397.8265953905043, 469.61792981103264)
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
dpi没有引入,修正后:
{'pt': {'down': [2021, 1693], 'left': [1700, 1458], 'right': [2431, 1464], 'up': [2102, 1268]}, 'camera': {'image_size': [4624, 2064], 'focal_length': 0.025, 'dpi': 72}}
(1.41274663572724, 1.3878169157326672, 1.3945121471603112, 1.4210246424947608)
(0.15685882167819443, 0.13509915063220496, 0.14034438226276122, 0.1656707696833365)
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我觉得现在很接近目标了,四棱锥的锥顶角度已经得出。
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
时间到,暂时搁置:
现在的代码:
from tkinter import Y
import numpy as np
input_params = {
"pt":{
"down":[2021,1693],
"left":[1700,1458],
"right":[2431,1464],
"up":[2102,1268]
},
"camera":{
"image_size":[4624, 2064],
"focal_length":25e-3,
"dpi":72
}
}
def get_two_points_angle(pt1, pt2, focal_length, dpi):
x = np.abs(pt1[0] - pt2[0]);
y = np.abs(pt1[1] - pt2[1]);
lenInPos = np.sqrt(x*x + y*y)*25.4e-3/dpi
angle = np.arctan2(lenInPos, focal_length)
return (angle, lenInPos, x, y)
def get_four_edge_angle(input_params):
up_left, ul_len, _, _ = get_two_points_angle(input_params["pt"]["up"],input_params["pt"]["left"], input_params["camera"]["focal_length"], input_params["camera"]["dpi"]);
up_right, ur_len, _, _ = get_two_points_angle(input_params["pt"]["up"],input_params["pt"]["right"], input_params["camera"]["focal_length"], input_params["camera"]["dpi"]);
down_left, dl_len, _, _ = get_two_points_angle(input_params["pt"]["down"],input_params["pt"]["left"], input_params["camera"]["focal_length"], input_params["camera"]["dpi"]);
down_right, dr_len, _, _ = get_two_points_angle(input_params["pt"]["down"],input_params["pt"]["right"], input_params["camera"]["focal_length"], input_params["camera"]["dpi"]);
return ((up_left, up_right, down_left, down_right),(ul_len, ur_len, dl_len, dr_len))
def calc_camera_pos(input_params):
print(input_params)
(edgeAngles, edgeLens) = get_four_edge_angle(input_params)
print(edgeAngles)
print(edgeLens)
if __name__ == "__main__":
calc_camera_pos(input_params)
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我不大能想象出与相机投射方向非垂直的一个平面上的一些矩形分割线,在焦平面的投影是什么。我能想象出部分,但想象不出整个平面在相机成像区域的投影。
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
然后据说在素描和摄影上有尽点的概念。不同的平面,原本平行的直线会在尽头相交,但是他们大概率会交汇到焦平面扩展区域的不同的点。对吧?
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这个问题牵涉的一些关键字:
透视法
Simultaneous Localization and Mapping (SLAM)
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
一个比较笨,但是可行的方法。
含光左卫
你懂的
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
角度在处理摄像问题时似乎非常重要。双目测距的那个不变量就是角度。
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示