笛卡尔(x,y)空间和数极坐标(log r,角度phi)的互相转换

原理:

数极坐标是对物体视场的一种不变表示,比如所有的正方形都是一样的,产生了一类二维旋转和尺度的不变性

rho=M*log(sqrt(x2+y2))

phi=atan(y/x)

核心函数:

cvLogPolar

效果:

代码:

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include <iostream>
int LogPolar(int argc,char** argv)  //polar:两级的,极地的
{
IplImage* src=cvLoadImage("e:\\picture\\zenfanxin.JPG");
IplImage* dst=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
IplImage* src2=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
double M=80;  //貌似在一定范围M越大复原后的图像越清晰
cvLogPolar(src,dst,cvPoint2D32f(src->width/2,src->height/4),M,CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS); //CV_INTER_LINEAR:双线性插值,默认使用  OUTLIERS:局外,笛卡尔坐标转换为数极坐标
cvLogPolar(dst,src2,cvPoint2D32f(src->width/2,src->height/4),M,CV_INTER_LINEAR | CV_WARP_INVERSE_MAP);  //数极坐标转换为笛卡尔坐标
cvNamedWindow("src");
cvNamedWindow("dst");
cvNamedWindow("src2");
cvShowImage("src",src);
cvShowImage("dst",dst);
cvShowImage("src2",src2);
cvWaitKey(0);
cvDestroyWindow("src");
cvDestroyWindow("dst");
cvDestroyWindow("src2");
cvReleaseImage(&src);
cvReleaseImage(&dst);
cvReleaseImage(&src2);
return 0;
}

笛卡尔(x,y)空间和数极坐标(log r,角度phi)的互相转换

时间: 2024-07-30 15:28:11

笛卡尔(x,y)空间和数极坐标(log r,角度phi)的互相转换的相关文章

笛卡尔心形线

Matlab代码: close all; alpha = -pi : pi/50 : pi; x = 2*cos(alpha);y = 2*sin(alpha);for p=1:length(x)        alpha1 = -pi : pi/100 : pi;         x1 = 1*cos(alpha1);        y1 = 1*sin(alpha1);        hold on;        plot(x(1,p)+x1,y(1,p)+y1-1,'g');endaxi

hdu 5412 CRB and Queries(线段树套笛卡尔树 - 动态区间第k大)

题目链接:hdu 5412 CRB and Queries 首先对所有出现过的值排序,建立线段树,每个线段树的节点是一棵笛卡尔树,笛卡尔树记录区间下标值. #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace std; #define lson(x) (x<<1) #define rson(x) ((x<<

笛卡尔树cartesian tree

笛卡尔树cartesian tree 笛卡尔树是一种特定的二叉树数据结构,可由数列构造,在范围最值查询.范围top k查询(range top k queries)等问题上有广泛应用.它具有堆的有序性,中序遍历可以输出原数列.笛卡尔树结构由Vuillmin(1980)[1]在解决范围搜索的几何数据结构问题时提出.从数列中构造一棵笛卡尔树可以线性时间完成,需要采用基于栈的算法来找到在该数列中的所有最近小数. 定义 无相同元素的数列构造出的笛卡尔树具有下列性质: 结点一一对应于数列元素.即数列中的每

POJ-2201-Cartesian Tree(笛卡尔树)

Description Let us consider a special type of a binary search tree, called a cartesian tree. Recall that a binary search tree is a rooted ordered binary tree, such that for its every node x the following condition is satisfied: each node in its left

笛卡尔心形曲线

1650年,斯德哥尔摩的街头,52岁的笛卡尔邂逅了18岁的瑞典公主克里斯汀.  那时,落魄.一文不名的笛卡尔过着乞讨的生活,全部的财产只有身上穿的破破烂烂的衣服和随身所带的几本数学书籍.生性清高的笛卡尔从来不开口请求路人施舍,他只是默默地低头在纸上写写画画,潜心于他的数学世界.  一个宁静的午后,笛卡尔照例坐在街头,沐浴在阳光中研究数学问题.他如此沉溺于数学世界,身边过往的人群,喧闹的车马队伍.都无法对他造成干扰.  突然,有人来到他旁边,拍了拍他的肩膀,“你在干什么呢?”扭过头,笛卡尔看到一张

[poj2201]Cartesian Tree(笛卡尔树)

题目链接:http://poj.org/problem?id=2201 就是给你key和value,建出笛卡尔树.感觉笛卡尔树的建树过程真的优美,按key排序后,每次插入一个点,相当于从根一直向右走的路径上,找到value小于当前点value,并且value最大的点,插入即可,具体看代码吧. 区分笛卡尔式和treap:两者都有key和value,都既满足二叉搜索树的性质,也满足堆的性质,但treap是用value去维护树的平衡,而笛卡尔树的value是我们已知的(好像是吧). #include<

[hdu1506 Largest Rectangle in a Histogram]笛卡尔树

题意:http://acm.hdu.edu.cn/showproblem.php?pid=1506 如图,求最大的矩形面积 思路: 笛卡尔树:笛卡尔树是一棵二叉树,树的每个节点有两个值,一个为key,一个为value.光看key的话,笛卡尔树是一棵二叉搜索树,每个节点的左子树的key都比它小,右子树都比它大:光看value的话,笛卡尔树有点类似堆,根节点的value是最小(或者最大)的,每个节点的value都比它的子树要小(或者大). 笛卡尔树的构造算法:从右链插入,同时维护右链的递增或递减序列

表达式解析[笛卡尔树]

2178 表达式运算Cuties 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 给出一个表达式,其中运算符仅包含+,-,*,/,^要求求出表达式的最终值 数据可能会出现括号情况 还有可能出现多余括号情况 数据保证不会出现>maxlongint的数据 数据可能回出现负数情况 输入描述 Input Description 仅一行,即为表达式 输出描述 Output Description 仅一行,既为表达式算

提升笛卡尔乘积效率

最近项目的计算节点用的最多的是一个笛卡尔乘积算法,由于字典集合比较多,总高度有时会达到很高的一个量级,例如:1G.这样笛卡尔算法所 耗费的时间将很大,如何提交笛卡尔算法效率已经是当务之急. 笛卡尔乘积的算法很简单,复杂度就摆在这里O(high*n) :n指字典集合个数,high是所有集合的高度乘积.复杂度没法降低,所以我们从循环里面的运算下手,尽量降低循环内的计算,性能有所提升,下面是老版笛卡尔和新版笛卡尔的代码: 新版: 对比旧版,减少了high*(maxHigh-1)*2*n次除法,效率有所