LogPolar 对数极坐标
LogPolar 对数极坐标
对数极坐标(logpolar)是仿真生物视网膜中央凹陷的特性,具有数据压缩的能力,可用于目标跟踪中快速尺度和旋转变换不变的模板匹配。
对数极坐标其实就是将图像像素坐标转换成极坐标,然后对r求取对数,获得的坐标。
直角坐标系和极坐标系的变换公式为:
具体过程是怎么样的呢?首先要选定坐标原点,然后才能变换。一般坐标原点选为图像的中心点,如果直接对每一个像素点计算对应的坐标,首先得到的结果并不是个矩阵,其次这样之后再逆变换到图像上,信息并没有变化。
所以在转换计算时,使用如下图类似的结构。
这个结构包含32个同心圆,每个同心圆上有64个区域,其中径向上相邻的区域大小变化时线性的,距离中心越远,区域越大。
在变换时,每个区域计算均值,然后该区域转换到坐标下,就获得的矩阵,如下图示意
如果我们将得到的坐标下的图像再映射回直角坐标系中,那么离中心近的区域显然分辨率较高,而距离远的区域就相当于经过了均值滤波。如下图
由于图像都是矩阵,没有环形的,所以在转换过程中,肯定会碰到超出图像边界的区域,这时候采用0值替代。
OpenCV中logpolar转换函数为
void cvLogPolar(const CvArrsrc, CvArr dst, CvPoint2D32f center,double M,int flags)
src: 输入图像
dst: 输出图像
center: 设置的坐标原点位置
M: 尺度参数
flag: 标志位和插值方法
CV_INTER_LINEAR 内部采用线性插值,注意由于M的存在结果可能不会相邻整数,中间需要差值,逆变换也需要插值
CV_WARP_FILL_OUTLIERS 对于超出图像边界区域如何处理
- CV_WARP_INVERSE_MAP 标志位,未设置表示转换成极坐标,设置表示由极坐标变回直角坐标
示例:
测试图像
代码
- #include "highgui.h"
- #include "cv.h"
- int main(int argc, char** argv)
- {
- IplImage* img = cvLoadImage(argv[1]);
- cvNamedWindow("Origin");
- cvShowImage("Origin", img);
- IplImage* out = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
- cvLogPolar(img, out, cvPoint2D32f(img->width / 2, img->height / 2), 40, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
- cvNamedWindow("logPolar");
- cvShowImage("logPolar", out);
- IplImage* back = cvCreateImage(cvGetSize(img), img->depth, img->nChannels);
- cvLogPolar(out, back, cvPoint2D32f(img->width / 2, img->height / 2), 40, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS + CV_WARP_INVERSE_MAP);
- cvNamedWindow("Reconstructure");
- cvShowImage("Reconstructure", back);
- cvWaitKey(0);
- cvReleaseImage(&img);
- cvDestroyWindow("Origin");
- cvReleaseImage(&out);
- cvDestroyWindow("logPolar");
- cvReleaseImage(&back);
- cvDestroyWindow("Reconstructure");
- }
得到结果图像:
可以发现中间分辨率还是可以的,但是周围显然模糊了好多。
当然还可以设置不同的中心位置,和不同的尺度参数。
内部不设置插值方式的结果
LogPolar 对数极坐标的更多相关文章
- (转)OpenCV 基本知识框架
以下是对<学习OpenCV>一书知识框架的简单梳理 转自:http://blog.chinaunix.net/uid-8402201-id-2899695.html 一.基础操作 ...
- opencv C++极坐标变换
#include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv ...
- Image Processing and Analysis_15_Image Registration:Image registration methods a survey——2003
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
- <学习opencv> opencv 概述及初探
目录 Opencv3 当前模块 OpenCV 贡献库(opencv_contrib) OpenCV 头文件 旧式C风格头文件 新式C++风格头文件 例程 DEMO1 - 显示图片 DEMO2 - 视频 ...
- 视频文件写入转换之图像处理-OpenCV应用学习笔记五
在<笔记二>中我们做了视频播放和控制的实现,仅仅算是完成了对视频文件的读取操作:今天我们来一起练习下对视频文件的写入操作:格式转换. 实现功能: 打开一个视频文件play.avi,读取文件 ...
- OpenCV 3.0函数库索引
================================== 前言:值的个数: cvCrossProduct:计算两个三维向量的向量积(叉积): cvCvtColor:将数组的通道从一个颜色空 ...
- [OpenCV] IplImage and Functions
In this chapter, APIs will make U crazy. Good luck! Next, Review Linear Algebra. Ref: http://blog.c ...
- OpenCV中的常用函数
1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cvWaitKey:使程序 ...
- Opencv 函数
1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cvWaitKey:使程序 ...
随机推荐
- 要学Java,怎么高效地学习,怎么规划
要学Java,怎么高效地学习,怎么规划? 题主是一个个例,99%的人(包括我自己)都没有题主这样的经历,也很难提出具有很强参考性的java学习建议.我倒是之前面试过一个跟题主有点类似的人,拿出来分 ...
- centos ab命令安装
yum install apr-util -ymkdir abcd abyum -y install yum-utils -yyumdownloader httpd yum localinstall ...
- Google map markers
现已被屏蔽 http://mabp.kiev.ua/2010/01/12/google-map-markers/ Надо по немногу отходить от празднывания но ...
- 你想的到想不到的 javascript 应用小技巧方法
javascript 在前端应用体验小技巧继续积累. 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElemen ...
- Login Reference for PhotoSomething
Android Background Processing with Handlers and AsyncTask and Loaders - Tutorial http://www.vogella. ...
- APP注释代码
<meta name="viewport" content="width=device-width,height=device-height,inital-scal ...
- mount -t nfs 的使用
服务安装:1. 在VMware Ubuntu中安装NFS服务: sudo apt-get install nfs-kernel-server2. 安装成功会出现配置文件/etc/exports. ls ...
- Yslow-23条规则
1. 减少HTTP请求次数 合并图片.CSS.JS,减少首次访问用户等待时间. 2. 使用CDN就近缓存==>智能路由==>负载均衡==>WSA全站动态加速 3. 避免空的src和h ...
- bzoj1023: [SHOI2008]cactus仙人掌图
学习了一下圆方树. 圆方树是一种可以处理仙人掌的数据结构,具体见这里:http://immortalco.blog.uoj.ac/blog/1955 简单来讲它是这么做的:用tarjan找环,然后对每 ...
- Windows10+Ubuntu双系统安装 (转)
1.Windows10+Ubuntu双系统安装: http://www.jianshu.com/p/2eebd6ad284d 2.UEFI启动模式安装ubuntu指南 : http://col ...