LogPolar 对数极坐标 您所在的位置:网站首页 origin设置对数坐标 LogPolar 对数极坐标

LogPolar 对数极坐标

#LogPolar 对数极坐标| 来源: 网络整理| 查看: 265

LogPolar 对数极坐标cvLogPolar

对数极坐标(logpolar)是仿真生物视网膜中央凹陷的特性,具有数据压缩的能力,可用于目标跟踪中快速尺度和旋转变换不变的模板匹配。

对数极坐标其实就是将图像像素坐标转换成极坐标,然后对r求取对数,获得的坐标。

直角坐标系和极坐标系的变换公式为:

具体过程是怎么样的呢?首先要选定坐标原点,然后才能变换。一般坐标原点选为图像的中心点,如果直接对每一个像素点计算对应的坐标,首先得到的结果并不是个矩阵,其次这样之后再逆变换到图像上,信息并没有变化。

所以在转换计算时,使用如下图类似的结构。

enter description here1477747281047.jpg

这个结构包含32个同心圆,每个同心圆上有64个区域,其中径向上相邻的区域大小变化时线性的,距离中心越远,区域越大。

在变换时,每个区域计算均值,然后该区域转换到坐标下,就获得的矩阵,如下图示意

enter description here1477747476479.jpg

如果我们将得到的坐标下的图像再映射回直角坐标系中,那么离中心近的区域显然分辨率较高,而距离远的区域就相当于经过了均值滤波。如下图

enter description here1477747569455.jpg

由于图像都是矩阵,没有环形的,所以在转换过程中,肯定会碰到超出图像边界的区域,这时候采用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 标志位,未设置表示转换成极坐标,设置表示由极坐标变回直角坐标 

示例: 测试图像

enter description here1477748420908.jpg

代码

#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"); }  

得到结果图像:

enter description here1477748496562.jpg

enter description here1477748523093.jpg

可以发现中间分辨率还是可以的,但是周围显然模糊了好多。

当然还可以设置不同的中心位置,和不同的尺度参数。

内部不设置插值方式的结果

enter description here1477748755693.jpg

enter description here1477748781963.jpg

参考: Log-Polar——关于对数极坐标 LogPolar matlab练习程序(Log Polar变换)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有