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:使程序 ...
随机推荐
- d3 document
https://github.com/d3/d3/wiki/API--%E4%B8%AD%E6%96%87%E6%89%8B%E5%86%8C https://github.com/d3/d3/wik ...
- Dom4j把xml转换成Map(非固定格式)
将xml转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.转换规则:1.主要是Map与List的互相嵌套2.同名称的节点会被装进List 示例: import java.util. ...
- reset.css css重置公共样式
@charset "utf-8";/*Css Document*/ /*! * @名称:reset.css * @功能:1.重设浏览器默认样式 * 2.设置通用原子类 *//* 防 ...
- js高级群的一些整理6月
https://github.com/the5fire/backbonejs-learning-note/blob/master/chapters/01-hello-backbonejs.rst Ba ...
- 关于Javascript的使用参考
DOM编程>1.js重要的作用就是可以让用户可以与网页元素进行交互操作-->JS精华之所在 >2.DOM编程也是ajax的基础 >3.DOM(文档对象模型),是HTML与XML ...
- Linux下提示 bash: xxx command not found
今天在虚拟机上安装了CentOS5.5,发现运行一些很正常的诸如:init,shutdown,fdisk 等命令时,悍然提示: bash: xxx command not found. 那么,首先就要 ...
- C/C++内存、指针问题
转 http://wenku.baidu.com/link?url=tN9Fac-XyB2F7V7xwYcRclu464G2c8ybYMBxNXbBGQJXEEy0vJxTOzcAeVrFrqYLfj ...
- ASP.NET 操作Excel中的DCOM配置方式
具体配置方式如下: 1. 组件服务管理窗口 在运行栏中输入命令:dcomcnfg,打开组件服务管理窗口,在组件服务->计算机->我的电脑->DCom配置->找到Microsof ...
- python des ecb 加密 demo
# -*- coding:utf-8 -*- from pyDes import * def hexString2bytes(src): ret =[] for i in range(len(src) ...
- python3 爬虫
保存当前cookie到本地 import urllib.request as ur import http.cookiejar as hc url='http://www.xxxx.com/admin ...