Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何旋转和缩放一个同形

如何旋转和缩放一个同形
EN

Stack Overflow用户
提问于 2012-05-23 05:46:13
回答 2查看 3K关注 0票数 5

我需要帮助

我正在从服务器接收到一个同形,所以我想将此同形规范化到我的应用程序的坐标系中,当我试图用坐标表示一个对象时,服务器应用程序生成接下来的4个点:

收到96.629539,217.31934;97.289948,167.21941;145.69249,168.28044;145.69638,219.84604

我的应用程序生成了接下来的4分:

本地126.0098,55.600437;262.39163,53.98035;259.41382,195.34763;121.48138,184.95235

I你用图形表示这个点,R(接收),P(本地)

看起来所生成的正方形是旋转和缩放的,所以我想知道是否有任何方法将这种旋转--一个比例--应用于服务器单形,以便能够拥有与我的应用程序相同的同形。

谢谢,我需要更多的信息,请问我。

非常感谢您的快速回答,在最后我使用其他近似,就像从服务器获得点和使用findhomography得到反单形一样简单。

homography=findHomography(srcPoints,dstPoints,match_mask,RANSAC,10);

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-05-23 07:30:55

我想我想明白了。下面是一个更准确的情节,你的两个同音。其中蓝色是接收到的同形,红色是本地的同形。

您可以使用OpenCV函数getAffineTransform来计算与3对点对相关的仿射变换(我必须重新组织点对,因为它们的顺序不对)。我在numpy中运行了以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
r = array([[97.289948, 167.21941], [96.629539, 217.31934], [145.69638, 219.84604]], np.float32)
l = array([[126.0098, 55.600437], [121.48138, 184.95235], [259.41382, 195.34763]], np.float32)
A = cv2.getAffineTransform(r, l)

这给了我们以下仿射关系:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
array([[  2.81385763e+00,  -5.32961421e-02,  -1.38838108e+02],
       [  7.88519054e-02,   2.58291747e+00,  -3.83984986e+02]])

我将其应用到r中,看看是否可以让l确保它像这样工作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# split affine warp into rotation, scale, and/or shear + translation matrix
T = mat(A[:, 2]).T
matrix([[-138.83810801],
        [-383.98498637]])

A = mat(A[:, 0:2])
matrix([[ 2.81385763, -0.05329614],
        [ 0.07885191,  2.58291747]])

# apply warp to r to get l
r = mat(r).T
A*r + T
# gives
matrix([[ 126.00980377,  121.48137665,  259.41381836],
        [  55.60043716,  184.9523468 ,  195.34762573]])
# which equals
l = mat(l).T
matrix([[ 126.00980377,  121.48137665,  259.41381836],
        [  55.60043716,  184.9523468 ,  195.34762573]], dtype=float32)

同样值得注意的是,您可以使用Markus Jarderot函数getPerspectiveTransform生成透视图转换,如OpenCV所示。

希望这能帮上忙!

票数 4
EN

Stack Overflow用户

发布于 2012-05-23 08:28:50

如果将点和转换插入到Maple中,则可以很快得到结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> with(LinearAlgebra);

> # The server coordinates
  pa := [[96.629539, 217.31934], [97.289948, 167.21941], [145.69249, 168.28044],
         [145.69638, 219.84604]]:

> # The local coordiantes
  pb := [[126.0098, 55.600437], [262.39163, 53.98035], [259.41382, 195.34763],
         [121.48138, 184.95235]]:

> # The placeholder variables for the transformation (last one is '1', because it
  # is scale-invariant)
  T := [seq]([seq](`if`(i = 3 and j = 3, 1, t[i, j]), j = 1 .. 3), i = 1 .. 3):
  V := convert(map(op, T)[1 .. -2], set):

> # Transformation function (Matrix multiplication + divide with 3rd coordinate)
  trans := (p, T) -> [
      (T[1, 1]*p[1]+T[1, 2]*p[2]+T[1, 3])/(T[3, 1]*p[1]+T[3, 2]*p[2]+T[3, 3]),
      (T[2, 1]*p[1]+T[2, 2]*p[2]+T[2, 3])/(T[3, 1]*p[1]+T[3, 2]*p[2]+T[3, 3])
  ]:

> # Transform pa, and construct the equation system
  pat := map(trans, pa, T):
  eqs := {op}(zip((p1, p2) -> op(zip(`=`, p1, p2)), pat, pb)):

> # Solve for the transform variables
  sol := solve(eqs, V):

> # Populate the transform
  eval(T, sol);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[  .1076044020,   -3.957029830,    1074.517140  ],
 [ 4.795375318,      .3064507355,   -430.7044862 ],
 [ 0.3875626264e-3, 0.3441632491e-2,   1         ]]

若要使用此方法,请将其与服务器点相乘为T * <x, y, 1>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void ServerToLocal(double serverX, double serverY, double *localX, double *localY)
{
    double w;
    w = 0.3875626264e-3 * serverX + 0.3441632491e-2 * serverY + 1.0;
    *localX = (.1076044020 * serverX - 3.957029830 * serverY + 1074.517140) / w;
    *localY = (4.795375318 * serverX + .3064507355 * serverY - 430.7044862) / w;
}

另一种方法可以在http://alumni.media.mit.edu/~cwren/interpolator/上读取

这一个可以用C写,给出一个合理的线性代数库。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10721289

复制
相关文章
Scrapy中Xpath的使用
请注意,本文编写于 990 天前,最后修改于 990 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
9300
Scrapy框架中的xpath选择
不同于我们普通爬虫获取xpath,scrapy获得xpath对象获取他的值语法 一.xpath对象获取值 xpath对象..extract() 二.Scrapy框架独有的xpath取值方式 利用hre
小小咸鱼YwY
2020/06/19
9910
scrapy选择器xpath
Scrapy提取数据有自己的一套机制,它们被称作选择器(seletors),通过特定的Xpath或者css表达式来"选择"html文件中的某个部分。
py3study
2018/08/02
6040
Scrapy实战5:Xpath实战训练
    今天给大家分享的是,如何在cmd和pycharm中启动自己的spider以及Xpath的基本介绍,并利用Xpath抓取伯乐在线单篇文章基本信息。
龙哥
2020/02/12
7650
【python爬虫】scrapy框架笔记(一):创建工程,使用scrapy shell,xpath
scrapy是个好东西,它的官方文档写的很详细,很适合入门。链接:http://scrapy-chs.readthedocs.io/zh_CN/1.0/index.html
蛮三刀酱
2019/03/26
6280
【python爬虫】scrapy框架笔记(一):创建工程,使用scrapy shell,xpath
Scrapy框架| 选择器-Xpath和CSS的那些事
这次接着上一篇文章来讲Scrapy框架,这次讲的是Scrapy框架里面提供的两种数据提取机制Xpath和CSS,其实除了这两种,我们还可以借助第三方库来实现数据的提取,例如:BeautifulSoup(这个在我的爬虫系列文章中有写过)和lxml(Xml解析库),Scrapy选择器是基于lxml库之上的,所以很多地方都是和lxml相似的。
Python进击者
2019/06/21
1.3K0
scrapy框架精讲!如何在最短的时间内学会xpath语法
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。
云飞
2018/09/13
6790
python网络爬虫(14)使用Scrapy搭建爬虫框架
爬虫框架也许能简化工作量,提高效率等。scrapy是一款方便好用,拓展方便的框架。
嘘、小点声
2019/07/31
6410
xpath路径的写法
3.查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素,使用绝对路径表示, 单/号)://form[1]/input
小小咸鱼YwY
2019/07/24
1.9K0
scrapy爬取1024种子
1024不必多说,老司机都懂,本文介绍scrapy爬取1024种子,代码不到50行!Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 关于scrapy用下图来说明即可(图片来自https://cuiqingcai.com/3472.html )
LiosWong
2019/03/14
3K0
scrapy爬取1024种子
(原创)七夜在线音乐台开发 第三弹 爬虫篇
上一篇咱们讲到了七夜音乐台的需求和所需要的技术。咱们今天就讲一下爬虫,为什么要讲爬虫,因为音乐台的数据源需要通过爬虫来获取,不可能手动来下载。下图是一个网络爬虫的基本框架: 网络爬虫的基本工作流程如下
七夜安全博客
2018/06/26
1.1K0
Python——Scrapy初学
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。Scrapy最初是为了页面抓取(更确切来说, 网络抓取)所设计的,也
闪电gogogo
2018/01/08
1.9K0
Python——Scrapy初学
Scrapy 爬虫实例(一)
在开始爬取之前,您必须创建一个新的Scrapy项目。 进入您打算存储代码的目录中,运行下列命令:
HLee
2021/06/10
6010
Scrapy 爬虫实例(一)
Python 爬虫之Scrapy《中》
Scrapy数据解析主要有两个大类:xpath() 和 css() ,今天这篇文章主要讲解xpath如何解析我们想获取的页面数据。同时Scrapy还给我们提供自己的数据解析方法,即Selector(选择器),Selector是一个可独立使用的模块,我们可以用Selector类来构建一个选择器对象,然后调用它的相关方法如xpaht(), css()等来提取数据,它的常用写法如下:
Wu_Candy
2022/07/04
8640
Python 爬虫之Scrapy《中》
Python最火爬虫框架Scrapy入门与实践,豆瓣电影 Top 250 数据采集
Python爬虫框架Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。
二爷
2020/07/22
2.4K0
Python最火爬虫框架Scrapy入门与实践,豆瓣电影 Top 250 数据采集
XML 的 XPath 语法
2018-06-24 11:43
walterlv
2018/09/18
1.1K0
chrome xpath的使用
最近研究爬虫的时候,发现chrome也支持xpath,用法如下,在console中输入
用户2936342
2018/08/27
1.1K0
chrome xpath的使用
Python网络爬虫(六)- Scrapy框架1.Scrapy2.安装和配置3.安装过程常见错误4.代码操作 - 创建一个Scrapy项目5.Scrapy框架进阶 - 深度爬虫
Scrapy Engine(Scrapy核心) 负责数据流在各个组件之间的流。Spiders(爬虫)发出Requests请求,经由Scrapy Engine(Scrapy核心) 交给Scheduler(调度器),Downloader(下载器)Scheduler(调度器) 获得Requests请求,然后根据Requests请求,从网络下载数据。Downloader(下载器)的Responses响应再传递给Spiders进行分析。根据需求提取出Items,交给Item Pipeline进行下载。Spiders和Item Pipeline是需要用户根据响应的需求进行编写的。除此之外,还有两个中间件,Downloaders Mddlewares和Spider Middlewares,这两个中间件为用户提供方面,通过插入自定义代码扩展Scrapy的功能,例如去重等。
Python攻城狮
2018/08/23
1.7K0
Python网络爬虫(六)- Scrapy框架1.Scrapy2.安装和配置3.安装过程常见错误4.代码操作 - 创建一个Scrapy项目5.Scrapy框架进阶 - 深度爬虫
Python网络爬虫(四)- XPath1.XPath2.XPath在python中的应用
XPath 即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。它使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。 XPath语法
Python攻城狮
2018/08/23
1.4K0
Python网络爬虫(四)- XPath1.XPath2.XPath在python中的应用
Python爬虫项目--爬取链家热门城市
本次实战是利用爬虫爬取链家的新房(声明: 内容仅用于学习交流, 请勿用作商业用途)
py3study
2020/01/20
7640

相似问题

信号处理:常规音频“节拍”检测

116

时钟节拍和时钟周期的概念

418

Java中的MIDI节拍时钟

10

在节拍数据的价格图上绘制交易进入信号

10

在Javascript中模拟MIDI节拍时钟

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文